728x90
반응형
SMALL
Python 에서 함수는 def 키워드를 통해 정의 한다.
함수의 매개변수에 default 값을 지정할 수 도 있다. 다만, 함수의 매개변수는 순서에 따라 지정되기 때문에 default 값 지정은 항상 함수의 마지막 매개변수에만 지정가능하다. 예제를 통해 살펴 보자.
위에서 default 값을 사용할 때 순서보장에 대한 불편함이 있었다. python 에서는 이 불편함을 해소하기 위해 키워드 argument 라는 것을 제공한다.
우리는 함수의 매개변수 갯수와 상관없이 받기를 원할때가 있다. Java에서 str... 을 사용하는 것 처럼 말이다. python 또한 유사한 기능을 제공한다.
함수에 포함된 첫번째 논리적 명령행에 적어둔 문자열은 'DocString'이라고 불리우는 것으로 나중에 문서화 할 때에도 사용 된다. DocString에 대한 규칙(사실 규칙은 아니지만 강력 권장)이 있다. 첫번째줄의 첫문자는 대문자로, 마지막 문자는 마침표로 끝나도록 작성한다. 두번째 줄은 비워 두고, 세번째 줄부터는 상세하게 작성한다. help(total) 하면 DocString 을 볼 수 있다.
max = 50 x = 50 def func(a,b,x): global max print('x is',x) x = 2 tmp = 0 if a > b : tmp = a elif a < b : tmp = b else: tmp = a if tmp > max: print(tmp, 'is maximum') else: print(max, 'is maximum') func(41,31,4) print('x is still',x)재밌는 것은 함수 밖에 정의된 max 를 func 안에서는 인식하지 못한다는 것이다. scope 가 정확히 나뉘어져 있다. 함수 안에서 상위 블록의 변수에 접근하기 위해서는 함수안에 해당 변수를 global 이라는 키워드로 정의 해 줘야 한다. 위 코드의 결과는 아래와 같다. x is 4 50 is maximum x is still 50
함수의 매개변수에 default 값을 지정할 수 도 있다. 다만, 함수의 매개변수는 순서에 따라 지정되기 때문에 default 값 지정은 항상 함수의 마지막 매개변수에만 지정가능하다. 예제를 통해 살펴 보자.
# 아래 함수는 정상이다. def say1(msg, times=1): print(msg*times) # 아래 함수도 정상이다. def say2(msg, times, abc=2): print(msg*times) print(abc) # 아래 함수도 정상이다. def say3(msg='default msg', times=1, abc=2): print(msg*times) print(abc) # 아래 함수는 어떨까? def say4(msg, times=1, abc): print(msg*times) print(abc) # 아래 함수는 어떨까? def say5(msg='hello msg', times): print(msg*times) say1() say1('hello',5)say4 함수는 어떻게 될까? 아래와 같이 친절한 에러가 발생한다. 물론 say5 함수도 같은 오류를 발생한다. SyntaxError: non-default argument follows default argument
위에서 default 값을 사용할 때 순서보장에 대한 불편함이 있었다. python 에서는 이 불편함을 해소하기 위해 키워드 argument 라는 것을 제공한다.
def say6(a, b=5, c=10): print('a is',a, 'b is',b, 'c is',c) say6(11, c=20)
우리는 함수의 매개변수 갯수와 상관없이 받기를 원할때가 있다. Java에서 str... 을 사용하는 것 처럼 말이다. python 또한 유사한 기능을 제공한다.
def total(init=5, *numbers, **keywords): '''Return sum of total numbers. numbers and keywords must be not empty' count = init for number in numbers: count += number for key in keywords: count += keywords[key] print(total.__doc__) return count print(total(10, 1, 2, 3, vegetables=50, fruits=100))*numbers 처럼 별을 하나 달아주면 함수에 넘겨진 모든 위치 기반 인수들이 param 이라는 이름의 튜플로 묶여서 넘어온다. **keywords 처럼 별을 두개 달아주면 함수에 넘겨진 모든 키워드 인수들이 param 이라는 이름의 사전으로 묶여서 넘어온다. '튜플'과 '사전' 은 다음에 알아보기로 하고....
함수에 포함된 첫번째 논리적 명령행에 적어둔 문자열은 'DocString'이라고 불리우는 것으로 나중에 문서화 할 때에도 사용 된다. DocString에 대한 규칙(사실 규칙은 아니지만 강력 권장)이 있다. 첫번째줄의 첫문자는 대문자로, 마지막 문자는 마침표로 끝나도록 작성한다. 두번째 줄은 비워 두고, 세번째 줄부터는 상세하게 작성한다. help(total) 하면 DocString 을 볼 수 있다.
728x90
반응형
LIST
'IT > Python' 카테고리의 다른 글
Python - I/O, File I/O, pickle (0) | 2018.09.10 |
---|---|
Python - Class (0) | 2018.09.07 |
Python - 자료구조 (0) | 2018.08.30 |
Python - 기본문법 (0) | 2018.08.27 |
Python 시작하기 - hello world (0) | 2018.08.24 |