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 (2) | 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 |