Function Parameters?? 영어 투성이라서 머리 아파서 뒤로가기 누르신다구요?! 댓츠 논노! 아주 쉽게 풀어풀어~ 설명 드르갑니다!🧑🏻💻
def escape_room(my_name, your_name):
print(f"프로 탈출러 {my_name}의 도움아래 {your_name} 탈출!")
def
는 함수(Function)를 시작한다는 알림표시와 같다! def
로 적혀 있다면 아... 함수(Function)구나.. 하자!
그 괄호 뒤의 변수같은 애들이 바로 Parameters
! 함수를 동작하는데 필요한 변수들을 파라미터로 받아 사용할 수 있다. 위의 코드는 my_name
과 your_name
을 사용하여 문자열을 print
하는 것을 볼 수 있다.
그것도 댓츠 논노! 아래의 코드를 같이 보자😎
def your_face():
print("꽃미남")
def how_go_to_your_home():
print("버스 100번 타거나, 지하철 1, 7호선 이용!")
두개의 함수 모두 파라미터를 전혀 받지 않고 그래로 사용된다. 만약 이 코드들을 사용하면 어떻게 될까? print
로 지정된 문자열이 그대로 출력될 것이다👏
def escape_room(my_name, your_name):
print(f"프로 탈출러 {my_name}의 도움아래 {your_name} 탈출!")
# Keyword Arguments
escape_room(your_name="tori", my_name="code_sign")
위의 코드를 보면 순서대로 하지 않았다. 다만, 어떤 파라미터에 대입하는 건지 알려주는 대입연산자를 써서 활용했다. 이렇게 하면 순서는 뒤바꼈지만, 가독성은 더 좋은 코드가 될 수도 있다.
물론!
섞어서 쓰는 것도 가능하다.
def escape_room(my_name, your_name):
print(f"프로 탈출러 {my_name}의 도움아래 {your_name} 탈출!")
# Mixing positional arguments and keyword arguments
escape_room("code_sign", your_name="tori")
def escape_room(my_name = "code_sign", your_name):
print(f"프로 탈출러 {my_name}의 도움아래 {your_name} 탈출!")
# Parameter Default Value
escape_room("tori")
이와 같이 처음 함수를 만들때 파라미터에 대입연산자로 지정해주면 default
으로 쓸 수 있다. 하지만, default
가 마지막에 있지 않는다면 오류가 날 수 있다.
syntax error...😂
따라서 non-default value parameter
를 꼭 앞에 써주고, default value parameter
를 뒤에 써주자!
def escape_room(my_name = "code_sign", your_name):
print(f"프로 탈출러 {my_name}의 도움아래 {your_name} 탈출!")
# Parameter Default Value
escape_room("tori")
이렇게 하면 OK!!👍
근데 진정한 문제는 또 있다!!(WHAT?!)
바로 위치인수positional arguments
와 가변인수variable length arguments
그리고 가변 키워드 인수variable length keyword arguments
...
진정하자. 일단 위치인수는 우리가 지금까지 그냥 썼던 인수들을 말한다.
escape_room(my_name, your_name)
에서 my_name
, your_name
이 두 녀석이 위치인수다!
def escape_room(my_name, your_name, *ect):
print(f"프로 탈출러 {my_name}의 도움아래 {your_name} 탈출!")
print("그 외...", end=" ")
for x in ect:
print(x, end=" ")
print()
escape_room("code_sign", "tori", "mark", "mikail", "trump")
요놈은 좀 특이하다. 위의 코드를 보면 파라미터에 *ect
가 붙었고, 실행시키는 곳에선 파라미터가 2개도 3개도 아닌 5개를 받는다! 결과를 출력하면 다음과 같다.
프로 탈출러 code_sign의 도움아래 tori탈출!
그 외... mark mikail trump
즉, *ect
는 그 뒤의 인수들을 다 나타내는 인수라해서 가변인수라고 불린다!
def escape_room(my_name, your_name, *ect, **keyword):
print(f"프로 탈출러 {my_name}의 도움아래 {your_name} 탈출!")
print("그 외...", end=" ")
for x in ect:
print(x, end=" ")
print()
for key, value in keyword:
print(key, "=", value)
*ect
에 별 두개가 더 붙은 인수 **keyword
인수가 생겼다. 이 인수는 자료형이 일단 dictionary type
이다. 아래 코드를 통해 실행방법과 결과를 보자!
escape_room("code_sign", "tori", "mark", "mikail", "trump", 도시="서울", 성별="남", 코딩실력="최고로 나아가는 중")
# 결과!
프로 탈출러 code_sign의 도움아래 tori탈출!
그 외... mark mikail trump
도시 = 서울
성별 = 남
코딩실력 = 최고로 나아가는 중
이해가 될까..? 사전형 자료형으로 받기 때문에 이와같이 출력된다고 보면 된다.
(안돼.. 이것만 같이 하고 가자...)
🚫오류코드
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
keyword-only로 써야하는데 그렇지 않아서 나오는 오류이다.
사실상 파라미터 순서가 잘못된...
❗️해결방법
func_param_with_var_args("정우성", "01012341234", "seoul", age = 20)
🚫오류코드
SyntaxError: invalid syntax
맨 뒤 파라미터인 address=0
의 위치가 잘못된거다. 가변 키워드 인수가 어디까지 나올 줄 알고 디폴트 인수인지 알겠는가...🧨
❗️해결방법
def func_param_with_kwargs(name, age, address=0, **kwargs):
...
순서 재정렬!
🚫오류코드
SyntaxError: invalid syntax
디폴트 인수, 위치 인수, 가변 인수, 가변 키워드 인수... 모두 잘못!!!
❗️해결방법
def mixed_params(age, address, name="아이유", *args, **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, "seoul", "정우성", "01012341234", "male" ,mobile="01012341234")
일단 파라미터 순서를 위치 인수, 디폴트 인수, 가변 인수, 가변 키워드 인수로 나타냈고,
실행 순서도 그에 맞게 바꿔주었다.
address="seoul"
은 잘못하면 사전형으로 취급될 수 있으니 앞부분을 삭제해주었다.
❗️해결방법
당연히, 어떤게 디폴트 인수인지 모르니까! 그 뒤에 있을 인수는 과연 어떤건지 컴퓨터가 모르니까!!
인수 친구들~ 잘 지내보자구🙌