일정한 작업을 수행하는 코드 블럭으로, 반복되는 코드를 함수로 정의하여 사용하여 가독성을 UP!
def 함수명(parameter):
문장1
문장2
...
문장N
[return 리턴값]
Positional Arguments : 호출 값이 순서대로 함수 내 parameter로 전해지는 방식
def add(a, b):
print(a + b)
add(2, 3)
Keyword Arguments : Parameter의 이름으로 맞춰 값을 전해주는 방식으로 실제 Parameter의 순서가 바뀌어도 무방함
- parameter의 이름을 통해 값을 전달하기 때문에 실수로 값이 바뀔 확률이 적어지고 가독성의 상승도 도모할 수 있음
def mul(a, b, c):
print(a * b * c)
mul(a = 2, b = 2, c = 3) == mul(c =3, a = 2, b = 2)
Mixing positional arguments and keyword arguments : 기본방식과 Keyword Arguments 방식의 혼용
- Keyword Arguments의 순서는 상관없지만 Positional Argument의 자리가 지켜지지 않을 경우에는 Error가 발생하므로 Positional Argument의 자리는 꼭 지켜야 하며 Keyword Argument는 Position Argument 뒤에 삽입할 것
def mult(a, b, c):
print(a * b * c)
mul(b=3, 2, c = 2)
SyntaxError: positional argument follows keyword argument
- Parameter Default Value : Parameter에 디폴트 값을 정의해 줄 수 있으며, 함수 호출 시 굳이 값을 넘기지 않아도 되며 항상 맨 뒤에서 정의해야 함
```python
def sum(a, b = 2):
return a+b
sum(3)
파이썬 인터프리터에서는 사용자가 혼합적으로 디폴트 값을 지정했을 경우 주어진 argument가 어떤 parameter와 일치하는 지 결정할 수 있는 능력이 없기 때문에 parameter가 올바른 순서대로 주어지지 않으면 SyntaxError가 발생하게 됨
def sum(a=2, b):
return a+b
sum(3)
SyntaxError: non-default argument follows default argument
본 예시와 같이 파이썬 인터프리터에서는 호출된 sum(3)이 함수 내에서
따라서 함수 내에서 Parameter를 정의 하기 위해서는 다음의 순서를 꼭 인식하고 있어야 함
def keyword(key, keyword='abc', *word, keyword_only, keyword_only2 = 8, **kwargs):
print(key, keyword, word, keyword_only, keyword_only2, kwargs)
keyword(1, 1, 2, 3, keyword_only=7, a=3, b=5)
>>> 1 1 (2, 3) 7 8 {'a': 3, 'b': 5}
앞서 Default Argument는 Positional Argument보다 앞서 위치 할 수 없다고 정의했다. 위 그림에서는 Keyword-only Argument라는 개념이 등장하는데, 파이썬에서는 *, 를 통해 keyword-only를 명시 할 수 있도록 제안하고 있음
*,
을 통해 keyword-only를 명시할 수 있도록 제시되어 있으며, * 앞은 positional or keyword argument, 뒤는 keyword-only argument를 의미