파라미터 우선순위 문제

최대환·2021년 4월 19일
0

파이썬

목록 보기
10/16
post-thumbnail

우선순위


우선순위
1. 위치 인수 (기본값 X)
2. 위치 인수 (기본값 O)
3. / (위치 인수들 어딘가에 존재)
4. 위치 가변 인수 (*)
5. 키워드 전용 인수 (기본값 유무 상관 없음)
6. 키워드 전용 가변 인수 (**)


args

👉 문제

  • *args가 age보다 앞에 위치했다.

💻 python

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)

👀 결과

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

👉 문제해결

  • age 와 *args의 위치를 바꿔줬다. 그에 맞게 함수에 넣는 값도 바꿔줬다.

💻 python

def func_param_with_var_args(name, age, *args):
    print("name=",end=""), print(name)
    print("args=",end=""), print(args)
    print("age=",end=""), print(age)

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

👀 결과

name=정우성
args=('01012341234', 'seoul')
age=20

kwargs

👉 문제

  • adress가 **kwargs보다 뒤에 와 있다.

💻 python

def func_param_with_kwargs(name, age, **kwargs, address=0):
    print("name=",end=""), print(name)
    print("age=",end=""), print(age)
    print("kwargs=",end=""), print(kwargs)
    print("address=",end=""), print(address)

func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")

👀 결과

SyntaxError: invalid syntax

👉 문제해결

  • **kargs랑 adress의 위치를 바꿔준다.
  • 밑에 파라미터도 adress 와 mobile의 순서를 바꿔준다.

💻 python

def func_param_with_kwargs(name, age, address=0, **kwargs):
    print("name=",end=""), print(name)
    print("age=",end=""), print(age)
    print("kwargs=",end=""), print(kwargs)
    print("address=",end=""), print(address)

func_param_with_kwargs("정우성", "20", address="seoul", mobile="01012341234")

👀 결과

name=정우성
age=20
kwargs={'mobile': '01012341234'}
address=seoul

args 와 kwargs문제

👉 문제

  • position arguments 인 age위치가 뒤로 밀려나 있다.
  • keyword arguments 인 adress 위치가 벗어나있다.

💻 python

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

👀 결과

SyntaxError: invalid syntax

👉 문제해결

  • age를 맨앞으로 보내준다.
  • adress를 *args 와 **kwargs 사이에 넣어준다.
  • 호출하는 함수도 adress와 mobile의 순서를 바꿔준다.

💻 python

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",address="seoul", mobile="01012341234")

👀 결과

name=정우성
args=('01012341234', 'male')
age=20
kwargs={'mobile': '01012341234'}
address=seoul
profile
나의 개발지식 output 공간

0개의 댓글