파이썬 함수 인수 TIL#40

may_soouu·2020년 8월 19일
0

1. default value parameter / non-default value parameter

함수 선언 시, 2개의 인자를 받을 때,
default value parameter 가 앞에 오면 안된다.

def test(people = "이수현", nonpeople)

이렇게 입력을 하면 non-default argument follows default argument 에러가 뜬다.

왜?!🤷‍♂️

함수 정의할 때 꼭 넘겨야 하는 인수를 먼저 쓰고, 그 다음에 선택적으로 넘겨야 하는 인수를 써야한다! 즉,

def test(nonpeople, people = "이수현")

이렇게 하면 됩니다. 🎈

2. 위치인수 vs 가변인수

위치 인수 : 값이 매개변수에 순서대로 전달되는 인수이며, 가장 많이 사용한다.

def print_number (a,b,c):
	print(a,b,c)
print(7,8,9)

789가 abc에 순서대로 들어간다.


가변 인수 : 인수의 개수가 변할 수 있다는 의미이다.

def function_name(*args):
	sum = 0
    for i in args:
    	sum += i
print(1,2,3,4,5)

가변인수의 위치는 항상 위치인수 뒤에 와야한다. 왜냐하면 가변인수가 앞에 오게 되면 뒤에 오는 위치인수의 의미가 사실상 없어지기 때문이다

  • 예제_수정전
    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)
    >>>>> 가변인수가 위치인수보다 앞에 왔다. 수정해보자
  • 예제_ 수정후
def func_param_with_var_args(name, age, *args):
    print("name=",end=""), print(name)
    print("age=", end=""), print(age)
    print("args=",end=""), print(args)
func_param_with_var_args("정우성", 20, r"01012341234", "seoul")

3. 키워드 가변인수 (키워드인수 + 가변인수)

키워드 인수를 가변인수를 사용해 하나의 매개변수로 받는 것
** 를 앞에 붙이면 된다.
이때, 값이 튜플로 전달되는 것이 아닌, 키워드와 값을 쌍으로 보내기 때문에 사전(dict)으로 전달 된다.

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

이 함수는 오류가 난다.

🤷‍♂️ 왜?!

  • default 는 맨 앞에 두면 안된다고 했다.
  • 가변인수 *args 가 위치인수 age 보다 앞에 있다.
  • 키워드 가변인수 **kwargs가 address 보다 앞에 있다.
    여기서 잠깐!! kwargs 와 args의 명칭은 다른 명칭으로 써도 상관없으나 통상적으로 위의 키워드를 쓴다. 특별한 경우가 아니면 수정하지 않기로,,


    그럼 위의 내용 기반으로 코드를 수정해보자.
def mixed_params(age, name="아이유", *args, address, **kwargs):
    print("age=", end=""), print(age)
    print("address=",end=""), print(address)
    print("name=",end=""), print(name)
    print("args=",end=""), print(args)
    print("kwargs=",end=""), print(kwargs)
mixed_params(20, "정우성", "01012341234", "male" ,address="seoul", mobile="01012341234")

여기서 이상한 점!!
가변인수가 위치인수보다 뒤에 와야한다고 했으나, 위의 경우 *args뒤에 address가 왔다(꼭 기억하자!!)
address 의 경우 인자가 지정되어 있다.

  • 이러한 변수를 keyword-Only Arguments 라고 부르며, *args뒤에 위치한다.

📌 최종 정리

  • 파이썬 함수 인수들의 우선순위를 정리해보자

1. 위치인수(기본적인 인수)

2. default value 인수(값 지정하는 인수)

3. 가변인수(*)

4. keyword-Only Arguments

5. 키워드 가변인수(**)


🔍 아래 그림을 같이 참고하면 좋을 것 같다.
_출처 : https://getkt.com/blog/python-keyword-only-arguments/

profile
back-end 개발자

0개의 댓글