[TIL] 8/21 Python *parameter

김성진·2020년 8월 21일
0
post-thumbnail

Function Parameter


*위와 같이 keyword arguments는 순서가 바뀌어도 상관 없지만, positional arguments 부분은 순서를 지켜줘야 한다.

Parameter default value

함수에서는 parameter에 default 값을 미리 정해주는 것도 가능하다,
단! 아래 예시는 잘못 되었다

def love_you(my_name = "정우성", your_name): 
    print(f"{my_name} loves {your_name}")
love_you(your_name="아이유")
  • syntax error이다. 그 이유는 정의된 parameter가 default 값이 정의 되지 않은 parameter 보다 먼저 위치해 있으면 안된다는 것이다!
    따라서,아래와 같이 바꿔주면 된다!
def love_you(your_name, my_name = "정우성"): 
    print(f"{my_name} loves {your_name}")
love_you(your_name="아이유")

2.마찬가지로!

def func_param_with_var_args(name, age, *args):
    print("name=",end=""), print(name)
    print("args=",end=""), print(args)
    print("age=",end=""), print(age)
exam1("정우성", 20, "01012341234", "seoul")

def func_param_with_var_args(name, *args, age):
    print("name=",end=""), print(name)
    print("args=",end=""), print(args)
    print("age=",end=""), print(age)
exam1("정우성", "01012341234", "seoul", 20)

위의 두개의 코드 중 첫번째는 옳지만 두번째 코드는 에러가 발생한다! 이유는 두번째 코드 중 age가 parameter 마지막 부분에 있기 때문에 세번째 keyword "seoul"이 age를 받는지 *args를 받는지 인식을 못 하고 있기 때문!

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

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

위와 비슷한 이유로 kwargs parameter를 address parameter 뒤로 옮겨줘야 실행된다! 밑에코드 O, 위코드 X

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

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

**밑에 코드 default값을 사용할건지, 안할건지에 따라 name="아이유"의 값을 변경할 위치 선정을 잘 해줘야 읽힌다.

profile
multi-national communicator with programming (back-end)

0개의 댓글