[Python] Function Definition
Function Definition (함수)
1. def
Name Convention
- sneak_case : 소문자와 언더바(_)를 활용하여 작성.
Example
def example(a, b):
return a+b
print(add(3, 4))
>>> 7
return
을 통해 값을 반환할 수 있다. (return
이 없을 경우, 해당함수는 아무런 값도 반환하지 않는다.)
*args
위치인자
def example(*args):
print(args)
example(1, 2, 3)
>>> (1, 2, 3)
-
정해지지 않은, 여러개의 입력값을 받도록 Asterisk(
*
) 를 통해 인자(Parameter)를 설정할 수 있다. -
입력인자 앞에
*
를 붙이게 되면 입력인자args
는 입력받는 값을 튜플형태로 변환한다. -
args가 아닌, 다른 이름으로 인자(Parameter)를 정의해도 문제없으나 관용적 표현인
args
를 사용하는 것을 권장한다.
def example(a, *args):
print(a)
print(args)
example(1, 2, 3)
>>> 1
>>> (2, 3)
위와 같이 단일 인자와 *args
를 같이 사용할 경우 순서에 유의한다.
a
와 *args
순서가 바뀔 경우 함수 정의는 되지만 실제로 함수를 호출할 때, a 에 위치인수로는 전달할 수가 없게되어 아래와 같이 TypeError
가 발생한다.
def example(*args, a):
print(a)
print(args)
example(1, 2, 3) # 1, 2, 3 이 모두 *args 에 전달된다.
>>> TypeError: example() missing 1 required keyword-only argument: 'a'
아래와 같이 키워드인자로 전달할 수는 있겠지만, 권장되지 않는다.
example(1, 2, a=77)
>>> 77
>>> (1, 2)
**kwargs
키워드인자
def example(**kwargs):
print(kwargs)
example(arg1=1, arg2=2)
>>> {‘arg1’: 1, ‘arg2’: 2}
-
키워드로 인수를 전달받아, 해당값을 Dictionary 형태로 변환한다.
-
함수 정의시 항상 마지막에 위치한다.
-
*args
와 마찬가지로 다른 이름으로 정의가능하나,**kwargs
가 관용적으로 사용된다.
Notice : Parameter 순서
권장
def func_order(arg1, arg2, *args, arg_init=10, **kwargs):
print(f'arg1: {arg1}')
print(f'arg2: {arg2}')
print(f'args: {args}')
print(f'arg_init: {arg_init}')
print(f'kwargs: {kwargs}')
func_order(1, 2, 3)
>>> arg1: 1
>>> arg2: 2
>>> args: (3,)
>>> arg_init: 10
>>> kwargs: {}
초기값이 설정되어 있는 arg_init
을 *args
앞에 위치하게 할 경우를 살펴보겠다.
def func_order(arg1, arg2, arg_init=10, *args, **kwargs):
print(f'arg1: {arg1}')
print(f'arg2: {arg2}')
print(f'args: {args}')
print(f'arg_init: {arg_init}')
print(f'kwargs: {kwargs}')
func_order(1, 2, 3)
>>> arg1: 1
>>> arg2: 2
>>> args: ()
>>> arg_init: 3
>>> kwargs: {}
arg_init
의 초기값 10이 위치인수로 3이 전달되어 3이 되어버린 것을 확인할 수 있다.
이러한 경우를 방지하기 위해서, 초기값을 설정한 인자(Parameter)는 *args
뒤에 두는 것을 권장한다.
Docstring
def example(a, b):
"""
This is a example.
"""
return a + b
위와 같이 """ """
를 활용하여 함수에 대한 Docstring 을 작성할 수 있다.
사용자가 이 설명을 보기 위해서는 help()
함수를 사용한다.
help(example)
2. lambda
-
익명 함수이자 일회성이다.
-
결과값이 무조건 return 되어진다.
def add(a, b):
return a + b
print(add(5,2))
>>> 12
정의된 위의 함수를 lambda 를 활용하여 변형시킬 경우 아래와 같이 정의된다.
f = lambda a, b : a + b
print(f(5, 7))
>>> 12
lambda 의 몸체에는 expression(식) 만 올 수 있다.
Expression vs Statement
a + b → expression (식)
c = a + b → statement (문)
Leave a comment