함수란? 일정한 작업을 수행하는 코드 블럭
input을 받아서 어떠한 계산or기능을 실행하고 결과값인 output을 생성한다!
Input -> 함수 -> Output
Python에서 input은 parameter / output은 return 값 이라고 한다.
def 함수명(parameter):
문장1
문장2
...
문장N
[return 리턴값]
조건에 따른 함수를 만들고자 한다면 다음과 같다.
def 함수이름:
if 조건:
return 조건이 참일경우 함수의 값
else:
return 조건이 거짓일 경우 함수의 값
input인 parameter
복수의 parameter를 사용할때는 세가지 구조로 사용이 가능하다.
- Positional Arguments 방법
- Keyword Arguments 방법
- Positional Argument와 Keyword Argument를 혼합하는 방법
말 그대로 위치에 따라 순서대로 배열된다. 가장 기본적인 방법이다.
def 함수이름(parameter1, parameter2):
print(함수 호출시 출력될 내용)
함수이름(parameter1의 값, parameter2의 값)
-> parameter1의 값과 parameter2의 값을 적용하여 출력된 함수의 return값
def love_you(my_name, your_name):
print(f'{my_name} loves {your_name}')
love_you('딸','엄마')
->
딸 loves 엄마
해당 keyword와 그에 대한 값을 정확히 명시해 주는 것이다.
def love_you(my_name, your_name):
print(f'{my_name} loves {your_name}')
love_you(your_name='엄마',my_name='딸')
->
딸 loves 엄마
위 예제처럼 keyword에 대한 값을 정확히 명시해서 알려주면 순서에 상관없이 의도한 대로 결과가 출력된다.
이 방법을 통해
- 순서의 구애를 받지 않는다.
- 코드의 가독성이 높아진다. (어떤 parameter에 대한 값인지 한눈에 들어온다.)
와 같은 효과를 얻을 수 있다.
positional 과 keyword argument를 혼합하여 사용하는 방법이다.
단 이럴땐 positional과 keyword argument 간의 순서에 유의해야 한다!
def love_you(my_name, your_name):
print(f'{my_name} loves {your_name}')
love_you('딸',your_name='엄마')
->
딸 loves 엄마
문제없이 잘 출력된다.
def love_you(my_name, your_name):
print(f'{my_name} loves {your_name}')
love_you(your_name='엄마','딸')
->
Traceback (most recent call last):
File "python", line 3
SyntaxError: positional argument follows keyword argument
이처럼 실질적으로 뒤에 위치한 parameter2값이 keyword 방법으로 지정되고, 그 위에 실질적으로 앞에 위치한 parameter1값이 뒤에 지정됐을 경우 SyntaxError: positional argument follows keyword argument 에러가 뜬다!
복수 (예시로 2개)의 parameter들 중 하나의 값에 대해 default value(기본 값)을 지정해 주어도 된다.
def love_you(my_name, your_name='엄마'):
print(f'{my_name} loves {your_name}')
love_you('딸')
->
딸 loves 엄마
복수의 parater들 중 몇가지에 대해 default value를 주고자 할때 그 순서가 중요하다.
결론부터 말하면 non-default value를 가진 parameter는 default value를 가진 parameter보다 뒤에 위치할 수 없다!
def love_you(my_name='딸', your_name):
print(f'{my_name} loves {your_name}')
love_you('엄마')
->
File "main.py", line 1
def love_you(my_name='딸', your_name):
^
SyntaxError: non-default argument follows default argument
이처럼 에러가 발생한다.
따라서 복수의 parameter를 사용하면서 일부에 대해 default value를 지정하려면 항상 뒤쪽에 위치해주어야 한다!