TIL_15 | [Python] Funtion Parameters

code_sign·2021년 1월 12일
0

Python

목록 보기
2/3
post-thumbnail

Function Parameters?? 영어 투성이라서 머리 아파서 뒤로가기 누르신다구요?! 댓츠 논노! 아주 쉽게 풀어풀어~ 설명 드르갑니다!🧑🏻‍💻

Function Parameters

def escape_room(my_name, your_name):
	print(f"프로 탈출러 {my_name}의 도움아래 {your_name} 탈출!")

def는 함수(Function)를 시작한다는 알림표시와 같다! def로 적혀 있다면 아... 함수(Function)구나.. 하자!

그 괄호 뒤의 변수같은 애들이 바로 Parameters! 함수를 동작하는데 필요한 변수들을 파라미터로 받아 사용할 수 있다. 위의 코드는 my_nameyour_name을 사용하여 문자열을 print하는 것을 볼 수 있다.

파라미터... 꼭 필요해?


그것도 댓츠 논노! 아래의 코드를 같이 보자😎

def your_face():
	print("꽃미남")
def how_go_to_your_home():
	print("버스 100번 타거나, 지하철 1, 7호선 이용!")

두개의 함수 모두 파라미터를 전혀 받지 않고 그래로 사용된다. 만약 이 코드들을 사용하면 어떻게 될까? print로 지정된 문자열이 그대로 출력될 것이다👏

my_name, your_name 순서대로 입력해줘야해?

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")

음.. my_name은 어차피 code_sign이면 기본값은 없을까?

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는 그 뒤의 인수들을 다 나타내는 인수라해서 가변인수라고 불린다!

❓Last! 가변 키워드 인수 = dictionary type 인수

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
도시 = 서울
성별 = 남
코딩실력 = 최고로 나아가는 중

이해가 될까..? 사전형 자료형으로 받기 때문에 이와같이 출력된다고 보면 된다.

이제 정말 마지막으로 점검만 하고 가자!!😂


(안돼.. 이것만 같이 하고 가자...)

마지막 점검, 이거 왜 안돼?

1. 가변인수 뒤에 위치인수!


🚫오류코드

TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'

keyword-only로 써야하는데 그렇지 않아서 나오는 오류이다.
사실상 파라미터 순서가 잘못된...

❗️해결방법

func_param_with_var_args("정우성", "01012341234", "seoul", age = 20)

2. 가변 키워드 뒤에 디폴트 인수?


🚫오류코드

SyntaxError: invalid syntax

맨 뒤 파라미터인 address=0의 위치가 잘못된거다. 가변 키워드 인수가 어디까지 나올 줄 알고 디폴트 인수인지 알겠는가...🧨

❗️해결방법

def func_param_with_kwargs(name, age, address=0, **kwargs):
	...

순서 재정렬!

3. 총체적 난국...

🚫오류코드

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"은 잘못하면 사전형으로 취급될 수 있으니 앞부분을 삭제해주었다.

4. 왜 디폴트 인수가 맨 앞에 있음 안돼?

❗️해결방법
당연히, 어떤게 디폴트 인수인지 모르니까! 그 뒤에 있을 인수는 과연 어떤건지 컴퓨터가 모르니까!!

Today, Learned

배운점

  • 가변인수, 가변키워드인수! 진짜 잘 몰랐던 개념인데 확실히 정리하고 가는것 같다
  • 특히 순서에 관해서 왜 안되는지 명확히 알았다!👍

느낀점

  • 이번 블로깅은 오래 걸렸지만, 진짜 뿌듯하고 진짜 확 배웠다는 느낌이 든다. 이것이 바로 블로깅의 참맛...?😱
  • 이 인수 친구들을 잘 사귀어서 내 프로젝트에 잘 적용시켜 봐야겠다!

오늘의 한마디

인수 친구들~ 잘 지내보자구🙌

profile
방탈출 좋아하는 코딩덕후

0개의 댓글