[Python] 함수에 사용할 재료(Parameter)를 전달하는 방법

[Ted's Log] 테드로그·2021년 8월 7일
2

Python Study-note

목록 보기
3/5
post-thumbnail

👋   Prologue

  def 키워드를 통해 함수를 만들어 사용자가 원하는 논리 구조로 작업을 진행할 수 있다. 파이썬에는 함수라는 단위 행위를 실행할 때, 필요한 재료를 인수로 넘겨줄 수 있는 다양한 방법이 있다. 이번 포스팅에서는 파이썬의 함수 매개변수에 값을 전달하는 방법과 주의해야 할 부분에 대해서 다루어보겠다.

cf. 매개변수와 인수 ( Parameter and Argument)

함수에 대해서 서술할 때 자주 혼용되어 헷갈리는 단어들이다. 엄연히 다른 의미를 가지고 있기 때문에 본격적인 내용 전에 한 번 짚고 넘어갈 필요가 있다. 매개변수(parameter)는 함수 호출 시 전달된 값을 받는 변수를 의미하며, 인수(argument)는 함수를 호출할 때 전달하는 입력값이다.


💡   Positional argument

  매개변수에 값을 전달하는 가장 기본적인 방법. Positional이라는 명칭에서 알 수 있듯이 변수가 위치하는 순서가 중요한 의미로 작용한다.

def set_user_age(name, age):
    return f"{name}: {age}"


print(set_user_age("ted", 28)) # NOT set_user_age(28, "ted") !!

# Result >> 
# ted: 28

📦   Keyword arguments

  함수를 호출할 때 매개변수 명칭을 직접 지정해서 인수를 넘겨주는 방식. 함수에 필요한 매개변수가 많아지게 되면 순서와 용도를 기억하고 전달하기 까다롭기 때문에 Keyword argument를 활용하면 좋다.

def set_user_info(name, age, gender, height):
    print(f"이름 : {name}")
    print(f"나이 : {age}")
    print(f"성별 : {gender}")
    print(f"신장 : {height}")
    

set_user_info("ted", gender="남자", height=178, age=28)
# keyword 방식은 매개변수 순서가 바뀌어도 괜찮다!

📍   Parameter default value

  함수에 전달할 인수를 생략해서 호출할 수도 있다. 함수를 정의할 때 default value를 설정해주면 인수가 전달되지 않았을 때 해당하는 값으로 처리하기 때문에 문제없이 함수를 호출할 수 있다.

def set_user_info(name, age, gender, height="비공개"):
    print(f"이름 : {name}")
    print(f"나이 : {age}")
    print(f"성별 : {gender}")
    print(f"신장 : {height}")

set_user_info("ted", 28, "남자")

# Result >>
# 이름 : ted
# 나이 : 28
# 성별 : 남자
# 신장 : 비공개

  Default value를 지정한 매개변수를 non-default value 변수 앞에 위치하지 않도록 주의해야 한다. 그렇지 않으면 함수에 정의된 매개변수보다 적은 수의 매개변수에 인수가 주어졌을 때 어떤 변수에 값을 전달할 지 모호하기 때문에 SyntaxError가 발생한다.
def set_user_info(name, age, height="비공개", gender):
    print(f"이름 : {name}")
    print(f"나이 : {age}")
    print(f"성별 : {gender}")
    print(f"신장 : {height}")
    
set_user_info("ted", 28, "남자")

>> SyntaxError: non-default argument follows default argument

📏   Variable length arguments

  컴파일 언어 방식이 아닌 파이썬에서는 함수에 대한 오버로딩을 지원하지 않는다. 이때 variable length arguments 방식을 활용하면 다양한 길이의 매개변수를 처리하는 함수를 만들 수 있다.

def sum_of_number(*args): # *(asterisk)를 하나 사용
    return sum(args)  # args는 튜플로 변환되어 사용

sum_of_number(1, 2, 3, 4)

# Result >> 
# 10

 📐   Variable length keyword arguments

  비슷하게 파이썬은 임의의 길이의 keyworad arguments를 받는 함수를 정의하는 것을 가능하게 한다.

def myfunc(name, **kwargs):    # *를 두개 사용
    if "fruit" in kwargs:      # Dictionary 형태로 변환되어 사용  
        print(f"{name}'s favorite fruit is {kwargs['fruit']}")
    else:
        print(f"{name} don't like fruit")


myfunc("Ted", fruit="pineapple")

# Result >>
# Ted's favorite fruit is pineapple

⚠️   Rules of Order of argument

  지금까지 파이썬에서 매개변수에 인자를 전달하는 다양한 방법들에 대해서 알아보았다. 여러 방법이 결합된 함수를 작성할 때 아래와 같은 원칙을 지켜서 작성한다면 SyntaxError와 논리적 오류를 방지하고, 코드의 가독성 또한 향상시킬 수 있을 것이다.

함수 정의할 때

  • Default argument는 non-default argument 뒤에 위치해야 한다.
  • Variable length argumnets 다음에 Variable length keyword arguments가 위치해야 한다.

함수 호출할 때

  • Keyword argument는 positional argument 뒤에 위치해야 한다.
  • Default argument와 Variable length arguments가 동시에 정의된 함수를 호출할 때, keyword argument를 사용해서 variable length argument의 시작을 구분해야 한다.

참고자료

https://getkt.com/blog/python-keyword-only-arguments/
https://stackoverflow.com/questions/9450656/positional-argument-v-s-keyword-argument

profile
성장하는 개발자가 되기 위한 발자취 🧑🏻‍💻

0개의 댓글