함수는 재사용이 가능한 프로그램의 조각을 일컫는다 , 이것은 특정 블록의 명령어 덩어리를 묶어 이름을 짓고 그 이름을 프로그램 어디에서든 사용함으로써 그 블록이 포함된 명령어들을 몇번이고 다시 실행할 수 있게 하는 것이다.
이를 보고 함수를 호출한다는 표현을 쓴다 , 사실 우리는 이미 앞에서 len이나 range와 같은 많은 내장 함수들을 이용해 왔다.
이러한 함수라는 건 프로그램을 작성할 때 아마 가장 중요한 단위가 될 것이다.
따라서 이번에는 함수를 다양한 관점에서 살펴보자
함수는 def 키워드를 통해 정의한다. def 뒤에는 함수의 식별자 이름을 입력하고 , 괄호로 감싸여진 함수에서 사용될 인자(arguments)의 목록을 입력하며 마지막으로 콜론을 입력하면 함수의 정의가 끝난다.
이후 새로운 블록이 시작되는 다음 줄 부터는 함수의 몸체부를 선언한다.
위에서 설명한 문법들을 이용하여 say_hello라는 함수를 정의했다.
이 함수는 어떠한 인자도 넘겨받지 않으므로 , 괄호 내에 매개변수를 정의하지 않는다.
함수의 인수란 함수로 넘겨지는 입력값들을 말하며 , 함수는 이 값을 처리하여 결과를 넘겨준다.
함수를 두번 호출하는 것은 코드를 두번 작성하는 것과 같은 효과를 가진다.
이번에는 함수와 매개변수에 대해 좀더 자세히 알아보자.
위 print_max함수는 두 매개변수 a와 b를 사용한다.
그리고 간단한 if~else문을 이용하여 크기를 비교하고 둘 중 큰 값을 출력한다.
print_max함수를 처음 호출할 때에는 값을 직접 인자로 입력하여 넘겨주었다 직접 코드를 짜보고 결과값을 확인해보자.
지역변수 : 우리가 정의한 함수 내에서 변수를 선언하고 사용할 경우 , 함수 밖에 있는 같으 이름의 변수들과 함수 안에 있는 변수들과는 서로 연관이 없다. 이러한 변수들을 함수의 지역(Local)변수라고 하며 , 그 범위를 변수의 스코프(Scope)라고 부른다.
모든 변수들은 변수가 정의되는 시점에서의 블록을 스코프로 가지게 된다.
함수의 첫번째 줄에서 x라는 이름을 가진 변수에 담긴 값을 출력한다.
이떄 함수 정의 위에 정의된 변수의 값을 함수의 매개변수 x로 넘겨받은 값이 출력된다.
다음으로 , x에 2를 대입한다 , 그러나 x는 지역변수이므로 함수 안에서 x의 값이 대입된 값으로 변하는 반면 메인 블록의 x는 변하지않고 그대로 남아있는다.
프로그램에서 사용된 마지막 print문을 통해 메인 블록의 x값을 출력해보면 , 그 이전에 호출된 함수 안에서 시행된 지역변수값의 변화가 적용되지 않았음을 확인할수 있다.
Global 문 : 함수나 클래스 내부에서 상위 블록에서 선언된 변수의 값을 변경하고 싶은 경우 , 파이썬에게 이 변수를 앞으로 지역 변수가 아닌 전역(Global)변수로 사용할 것임을 알려주어야 한다.
이때 global문을 이용한다 , global문을 사용하지 않으면 함수 외부에서 선언된 변수의 값을 함수 내부에서 변경할 수 없다.
global문을 통해 x가 전역변수임을 파이썬에게 알려준다. 따라서 , 이후로 x에 값을 대입하면 메인 블록의( 최상위에 있는) x값 또한 변경된다.
하나의 global문으로 여러개의 전역변수를 동시에 지정해 줄 수 있다. ( ex: global x,y,z)
기본 인수값
어떤 특별한 경우 함수를 호출할 떄 인수를 선택적으로 넘겨주게 하여 사용자가 값을 넘겨주지 않으면 자동으로 기본값을 사용하도록 하는 것이 편할떄가 있다. 이런경우 기본 인수값을 지정하면 된다.
함수를 선언할 때 원하는 매개변수 뒤에 대입 연산자 (=)와 기본값을 입력하여 기본 인수값을 지정한다.
say는 지정된 숫자(times)만큼 문자열(message)를 반복 출력하는 함수이다.
숫자를 지정하지않으면 기본값(times=1)이 적용되어 문자열이 한번 출력된다.
이 결과는 매개변수 times의 기본 인수값을 1로 지정해 줌으로써 얻어진다.
VarArgs 매개 변수 : 가끔 함수에 임의의 매개변수를 지정해주고 싶을때가 있다 , 이때 VarArgs 매개변수를 사용한다.
아래예제와 같이 * 기호를 사용하여 임의의(Variable) 개수의 인수(Arguments)를 표현한다.
'Programming > Python' 카테고리의 다른 글
파이썬의 자료 구조 , 리스트 (0) | 2017.11.11 |
---|---|
모듈 (0) | 2017.11.11 |
흐름 제어 (0) | 2017.11.11 |
변수 ~ (0) | 2017.11.11 |
파이썬 기초 (0) | 2017.11.11 |