def hello():
print('hello, world!')
hello()
# hello, world!
def add(a, b):
print(a + b)
add(1, 30)
# 31
def add(a, b):
"""이 함수는 a 와 b를 더한 결과를 반환하는 함수입니다."""
return a + b
print(add(10, 20)) # 30
print(add.__doc__) # 이 함수는 a 와 b를 더한 결과를 반환하는 함수입니다.
help(add)
# 결과
Help on function add in module __main__:
add(a, b)
이 함수는 a 와 b를 더한 결과를 반환하는 함수입니다.
def add(a, b):
return a + b
x = add(10, 20)
print(x) # 30
return 으로 반환하는 값을 반환값이라고 하며, 함수 호출의 결과를 바깥에 알려주기 위해 사용한다.
def not_ten(a):
if a == 10:
return
print(a, '입니다', sep='')
not_ten(10)
not_ten(3) # 3입니다
return 은 if와 조합하여 특정 조건일 때 함수 중간에서 빠져나오기 위한 용도로도 사용한다.
def add_sub(a, b):
return a+b, a-b
result = add_sub(20, 10)
print(result) # (30, 10)
add, sub = add_sub(20, 10)
print(add) # 30
print(sub) # 10
값을 여러 개 반환할 때는 return 에 반환값을 콤마로 구분해서 지정한다. 함수 호출 시 결과는 튜플로 반환된다.
리스트 또는 튜플 앞에 * 을 붙이면 언패킹되어서, 요소를 각각 넣은 것과 마찬가지의 기능을 수행할 수 있다.
def print_numbers(a, b, c):
print(a)
print(b)
print(c)
print_numbers(1, 2, 3)
print_numbers(*[1, 2, 3])
x = [1, 2, 3]
print_numbers(*x)
인수의 개수가 정해지지 않은 함수를 가변 인수 함수라고 한다.
def print_number(*numbers):
for arg in numbers:
print(arg)
print_number()
print_number(10, 20)
print_number(20, 40, 50)
x = [10, 20, 30]
print_number(*x)
매개변수는 args가 아닌 원하는 대로 지어도 상관 없지만, 관례적으로 arguments를 줄여서 args 로 사용한다.
args라는 매개변수 이름으로 튜플을 넘겨주는 함수이다.
함수를 호출할 때 매개변수로는 콤마를 이용해 직접 값을 여러 개 넣어도 되고, 리스트(튜플) 언패킹을 사용해도 된다.
매개변수 순서에서 가변 인수
는 항상 고정 인수
뒤에 와야 한다.
def print_number(a, *args):
print(a)
print(args)
# print_number() # 최소한 한 개의 인수가 필요하기 때문에 에러 발생
print_number(10)
print_number(20, 40)
x = [10, 20, 30]
print_number(*x)
def personal_info(name, age, address):
print('이름: ', name)
print('나이: ', age)
print('주소: ', address)
personal_info(name='heyrin', age=24, address='이촌동')
함수의 매개변수 이름과 딕셔너리 키 이름이 일치해야 하고, 매개변수 개수와 딕셔너리 키 개수도 일치해야 한다.
def personal_info(name, age, address):
print('이름: ', name)
print('나이: ', age)
print('주소: ', address)
x = {'name': '홍길동', 'age': 30, 'address': '서울시 용산구 이촌동'}
personal_info(**x)
인수를 직접 넣어 주거나, 딕셔너리 언패킹으로 함수를 호출할 수 있다.
def personal_info(**kwargs):
for kw, arg in kwargs.items():
print(kw, ': ', arg, sep='')
personal_info(name='홍길동')
personal_info(name='홍길동', age=25)
x = {'name': '홍길동', 'age': 30, 'address': '서울시 용산구 이촌동'}
personal_info(**x)
보통 **kwargs를 사용한 가변인수함수는 함수 안에서 특정 키가 있는지 확인한 후 기능을 수행하도록 만든다.
def personal_info(**kwargs):
if 'name' in kwargs:
print('이름: ', kwargs['name'])
if 'age' in kwargs:
print('나이: ', kwargs['age'])
if 'add' in kwargs:
print('주소: ', kwargs['add'])
# gender는 함수에서 확인할 수 없기 때문에 출력되지 않는다.
personal_info(name='홍길동', age=28, add='서울시 강남구', gender='Male')
*agrs
는 위치 인수를, **kwargs
는 키워드 인수를 받는다. 두 가지는 함께 사용할 수 있다. 대표적인 함수가 print
이다.
위치 인수와 키워드 인수를 함께 사용하는 경우, **kwargs
가 반드시 가장 뒤쪽에 와야 한다. 고정 매개변수와 함께 사용한다면 고정매개변수, 위치인수, 키워드 인수 순으로 지정해야 한다.
초깃값이 지정된 매개변수는 항상 맨 마지막으로 지정해야 한다.
def personal_info(name, age, add='비공개'):
print('이름: ', name)
print('나이: ', age)
print('주소: ', add)
# 초깃값이 있는 add는 생략하고 호출할 수 있다.
personal_info('홍길동', 30)
# 값을 넣으면 해당 값이 전달된다.
personal_info('홍길동', 30, '용산구')