Function(함수)는
parameter로 input을 받아서 return으로 리턴 값을 output 해준다.
이 함수를 호출할 때 parameter를 함수로 건내서 호출한다.
Function은 여러 형태를 사용할 수 있다.
: 순서에 맞춰 parameter 값을 전해줌.
def love_you(my_name, your_name) :
print(f"{my_name} loves {your_name}")
love_you("김우빈", "신민아")
👉🏻 출력 : 김우빈 loves 신민아
love_you에 입력한 순서 그대로 my_name에는 김우빈이, your_name에는 신민아가 입력되어서 김우빈 loves 신민아가 출력된 것이다.
만약 출력하는 인자에 신민아와 김우빈의 순서를 바꿔서 입력하게되면,
def love_you(my_name, your_name) :
print(f"{my_name} loves {your_name}")
love_you("신민아", "김우빈")
출력 : 신민아 loves 김우빈
인자에 입력한 순서가 달라짐에 따라 출력된 순서도 달라졌다.
: 앞에 쓰여진 keyword 단어처럼 이름을 지정하여 parameter 값을 전해준다.
def love_you(my_name, your_name) :
print(f"{my_name} loves {your_name}")
love_you(your_name="신민아",my_name="김우빈")
function parameter 순서와 다르게 함수를 호출하려는 인자에 your_name=신민아와 my_name=김우빈으로 keyword로 지정해주었더니 이름에 맞춰 자리를 찾아갔다.
순서가 바뀌어도 keyword 값을 정해주었기 때문에 호출이 제대로 된 것이다!
이렇게 keyword argument를 사용해주면
순서가 엉켜서 에러가 발생될 확률이 적어지고,
어떤 키워드에 어떤 값을 넣어줄지 명확하기 때문에 코드 가독성 좋아진다!
함수 호출하는 argument 하나에만 키워드를 지정해줬다.
순서가 바뀌어도 가능한지 확인해보기 위해서 첫번째 argument인 "신민아"에만 키워드 값을 주었다.
def love_you(my_name, your_name) :
print(f"{my_name} loves {your_name}")
love_you(your_name="신민아","김우빈")
자, your_name에 "신민아"를 넣어줬으니 keyword를 지정해주지는 않았지만 "김우빈"은 알아서 제 자리를 찾아가겠지?
❌ 절 대 그 렇 지 않 다 ❌ 에 러 발 생 ❌
File "/Users/kim-yejin/Documents/python/study.py", line 842
love_you(your_name="신민아", "김우빈")
^
SyntaxError: positional argument follows keyword argument
"김우빈"에는 키워드를 지정해주지 않았다. 순서에 맞춰 parameter 값을 전해주는 Positional argument인데 순서가 틀렸으니 값이 전해지지 않은 것이다.
때문에 keyword argument를 사용할 때는 positional argument를 앞에 사용한 뒤에 사용해야한다!
앞 | 뒤 |
---|---|
positional argument | keyword argument |
: 2)에서 함수를 호출하는 argument에 keyword를 지정해준 것처럼 함수 parameter에 default 값 정의가 가능하다.
: defult값을 정의하면 함수 호출할 때 인자에 값이 없어도 출력할 수 있다. 값이 넘겨지지 않은 경우에는 default로 지정해준 값이 자동으로 전해진다.
def love_you(my_name, your_name="신민아") :
print(f"{my_name} loves {your_name}")
love_you(김우빈)
출력 : 김우빈 loves 신민아
parameter에서 default value를 정해줄 때도 keyword argument와 똑같이 순서가 매우 매우 중요하다!
순서 예시 )
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")
Regular Positional Arguments 👉 age
Default Arguments 👉 name="아이유"
Variable Length Positional Arguments 👉 *args
Keyword-Only Arguments 👉 address
Variable Length Keyword Arguments 👉 **kwargs