parameter
를 받아서 return 값
을 output
으로 return
parameter
를 함수에 건내주어 호출(pass
)parameter
에는 크게 보면 4가지 형태
가 존재Positional Argument
def love_you(my_name, your_name):
print(f"{my_name} likes {your_name}")
love_you('유재석', '최준')
# 출력
# 유재석 likes 최준
my_name
이라는 parameter
자리에 '유재석'
이 위치하고, your_name
이라는 자리에 '최준'
이 위치한다(조금 더 개발자?스럽게 표현을 하고 싶은데.. 용어 정리가 안된다)parameter
들이 순서대로 전해져 print
구문으로 반환된다. Keyword Argument
def love_you(my_name, your_name):
print(f"{my_name} likes {your_name}")
love_you(your_name='최준', my_name='유재석')
# 출력
# 유재석 likes 최준
함수
를 호출할 때 순서대로 parameter
, 즉 인자(argument)
를 정리하는 방법 외에 아예 순서 대신이 인자에 해당하는 값을 입력해 줄 수 있다. 이러한 방식을 사용하게 되면 순서를 지키지 않아도 된다. 1. Positional Argument
의 방법보다는 가독성이 좋다고 한다. Mixing positional arguments and keyword arguments
def love_you(my_name, your_name):
print(f"{my_name} likes {your_name}")
love_you('유재석', your_name='최준')
# 출력
# 유재석 likes 최준
3번째 방법은 1번 방법과 2번 방법을 섞는 것이다.
위의 코드에서 알 수 있듯이 my_name
에 해당하는 '유재석'
부분은 그대로 Positional Argument
로 호출하였고, 그 다음 '최준'
이라는 인자는 Keyword Argument
로 호출하였다.
3번의 경우 수행 방법은 그렇게 어렵지도 않고 특별할 건 없어 보이는데.. 한 가지 매우 중요한 점으로 항상 Positional Argument
방법을 사용하는 인자가 Keyword Argument
를 사용하는 인자보다 앞 서 나와야 한다. 만약 이 둘의 위치가 제대로 지켜지지 않을 시 아래와 같은 오류가 발생한다.
def love_you(my_name, your_name):
print(f"{my_name} likes {your_name}")
love_you(your_name='최준', '유재석')
# 오류 출력
positional argument follows keyword argument
# 같은 말
non-default argument follows default argument
Parameter Default Value
def love_you(my_name, your_name='최준'):
print(f"{my_name} likes {your_name}")
love_you('유재석')
# 출력
유재석 likes 최준
parameter
자체에 default
값을 정의해 주는 것이다.default
값이 정의된 parameter
는 함수를 호출할 때 따로 값을 넘기지 않아도 된다. Non-Default Argument
를 항상 앞에 위치를 시켜야하고 그렇지 않을 경우 3번의 오류와 같은 예가 똑같이 발생한다. 아래 표에서 나오는 Variable Length Positional Arguments를 잘 모르겠다. 알아봐야 할 것 같다.
중요한 것을 알게 되었다. 바로 위의 사진에서 표현된 건 Argument의 종류와 순서...(밑에 엄청 자세하게 나와 있었다..) 이걸 보고도 몰랐었다. 내용을 정리해 보자면 이렇다.
예제 풀이 1) Positional Argument / Variable Length Argument
def func_param_with_var_args(name, *args, age):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
func_param_with_var_args("정우성", "01012341234", "seoul", 20)
# 에러 출력
# TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
def func_param_with_var_args(name, age, *args):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
func_param_with_var_args("정우성", 20, "seoul", "01012341234")
# 출력
# name=정우성
# args=('seoul', '01012341234')
# age=20
args
인자를 가장 뒤로 보냈다. name
, age
는 모두 positional Argument
이기 때문에 가장 앞에 있어야 한다. func_param_with_var_args()
함수를 실행하는 부분에 앞 부분 2개가 모두 positional Argument
, 뒷 부분에서 seoul과 전화번호가 실행이 된다.예제 풀이 2) Variable Length Keyword Argument
def func_param_with_kwargs(name, age, **kwargs, address=0):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")
# 오류 출력
# invalid syntax
**kwargs
즉 Variable Length Keyword Argument
인자를 가장 뒤로 보내면 정상 작동한다. def func_param_with_kwargs(name, age, address=0, **kwargs):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")
# 출력
# name=정우성
# age=20
# kwargs={'mobile': '01012341234'}
# address=seoul
kwargs
경우 dictionary로 반환이 되는 것을 알 수 있다. 추가 학습이 필요해 보인다. 예제 풀이 3) variable length keyword arguments
def mixed_params(name="아이유", *args, age, **kwargs, address):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
# 출력이 되지 않는다
name="아이유"
: default value*args
: Variable Length Argumentage
: Positional Argument**kwargs
: Variable Length Keyword Argumentaddress
: keyword argumentsage
- name="아이유"
- *args
- address
- **kwargs
이런 순서가 되겠다. 그럼 이를 적용해 순서를 바꿔주면 정상 출력이 되는 것을 볼 수 있다. def mixed_params(age, name="아이유", *args, address, **kwargs):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
# 출력
# name=정우성
# args=('01012341234', 'male')
# age=20
# kwargs={'mobile': '01012341234'}
# address=seoul
name="아이유"
이더라도 정우성
으로 입력을 하면 정우성으로 나온다.