TIL 4 - Function Parameters

dltngks54·2020년 11월 22일
0

파이썬

목록 보기
3/6

Q1. 함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 왜 오류가 나는 것인가?

def love_you(my_name = "Suhan", your_name): 
    print(f"{my_name} loves {your_name}")

Traceback (most recent call last):
File "python", line 1
SyntaxError: non-default argument follows default argument

이유:

만약 위에 함수를

love_you("coding")

이렇게 호출을 하게 되면 python은 "coding"이 my_name 파라미터인지 your_name 파라미터인지 명확히 알 수 없기 때문에 오류를 일으킨다.


Q2. 위치 인수(positional arguments)와 가변 인수(variable length arguments) ?

가변 인수 : *args 형태로 표시하며 인수를 원하는 만큼 가진다. 가변인수는 일반인수 뒤에 와야 하며 하나만 사용할 수 있다.

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)

위 코드가 에러를 일으키는 이유.
"정우성"은 name의 위치인수로 지정 되어 있지만 그 이후에 argument들은 *args 파라미터로 다 전달 되었기 때문이다.

*수정

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

Q3. 가변 키워드 인수 (variable length keyword arguments)

가변 키워드 인수는 *args 와 유사한 인수로서 그 차이점은 키워드를 가지고 있다. **kwargs 형태로 표현한다.

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

위 코드가 에러를 일으키는 이유.
가변 키워드 인수인 **kwargs를 통해 mobile, address값이 다 전달 되어 address 파라미터의 요소가 사라짐.

*수정

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

Q4. 위치 인수와 키워드 가변 키워드 인수 (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")

위 코드가 에러를 일으키는 이유.
우선 name, age 순서가 맞지 않고 name 이후에 *args에 나머지 요소들이 전달 되기 때문이다.

*수정

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")
profile
코린이

0개의 댓글