Python_Parameter2

DonQ·2020년 12월 20일
1

TIL

목록 보기
9/31
post-thumbnail

Variable Length 이해

*args

*args는 임의의 개수의 Positional Arguments 방식으로, 튜플 형태로 전달

def test(*args):
	print(args)

test('a','b','c')

# ('a','b','c')

**kwargs

**kwargs는 임의의 개수의 Keyword Arguments 방식으로, 딕셔너리 형태로 전달

def test(**kwargs):
    print(kwargs)

test(a=1,b=2,c=3)

# {'a': 1, 'b': 2, 'c': 3}


해당 그림을 참고하여 아래 Assignment를 해결해보자 !

Assignment

2. 위치 인수(positional arguments)와 가변 인수(variable length arguments)의 위치를 참고 자료를 통해 조사해서 어떤에러 인지 확인 및 수정 진행

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)

#아래와 같은 오류 발생 
Traceback (most recent call last):
  File "/Users/donq/Documents/project/practice_1220.py", line 6, in <module>
    func_param_with_var_args("정우성", "01012341234", "seoul", 20)
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'

오류 발생 이유

name = non-default positional parameter
*args = ariable Length Positional Parameter
age = non-default keyword parameter

  1. *args는 가변길이를 입력 받을수 있으므로, "01012341234", "seoul", 20까지 입력받을수 있다.
  2. age는 parameter가 없으므로 오류 발생 (TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age')

해결방안

  1. argument20을 age=20 으로 바꾼다.
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", age = 20)
  1. parameter age와 20의 자리를 바꾼다.
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

3. 가변 키워드 인수 (variable length keyword arguments)의 위치를 다음 참고 자료를 통해 조사해서 어떤에러 인지 확인 및 수정 진행

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

#아래와 같은 오류 발생 
invalid syntax

오류 발생 이유

name = non-dafault positional
age = non-dafault positional
**kwargs = variable Length Keyword
address = default keyword
1. 파라미터의 배치가 잘 못 되어 있다.

해결방안

  1. 위에 그림을 참고하면 variable length keyword는 가장 뒤에 입력되어야한다.
  2. address와 **kwargs 위치를 바꿔 준다.
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", mobile="01012341234", address="seoul")

출력결과

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

4. 위치 인수와 키워드 가변 키워드 인수 (variable length keyword arguments)의 위치를 다음 참고 자료를 통해 조사해서 어떤에러 인지 확인 및 수정 진행

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

#아래와 같은 오류 발생 
invalid syntax

오류 발생 이유

  1. 파라미터의 배치가 잘 못 되어 있다.

해결방안

  1. **kwarg는 제일 뒤로 배치, 파라미터 address의 재배치
  2. age는 보통의 position argument 이기 때문에 앞 순으로 배치
  3. address는 입력값에서 정의되었기 때문에, *arg와 **kwargs 사이 배치
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" ,mobile="01012341234", address="seoul")

출력결과

name=정우성
args=('01012341234', 'male')
age=20
kwargs={'mobile': '01012341234'}
address=seoul
profile
꾸준히 쌓아가는 코딩 Study

0개의 댓글

관련 채용 정보