Python Parameters

백선호·2021년 7월 8일
0

Assignment

목록 보기
1/3

default value parameterd와 non-default value parameter

-문제 코드
def hello(my_name, your_name, ntm = "Nice to meet you"):
  		print(f"Hello, {your_name}. I'm {my_name}. {ntm}.")

-->hello("Matthew", "Tom")
Hello, Tom. I'm Matthew. Nice to meet you.

상위 코드에서 함수 괄호 안에 ntm = "Nice to meet you" 부분을 볼 수 있다. 이 부분이 default value parameter라 하고 my_name, your_name 은 non-default value parameter라고 한다.

-수정된 코드
def hello(ntm = "Nice to meet you", my_name, your_name):
  		print(f"Hello, {your_name}. I'm {my_name}. {ntm}.")

-->hello("Matthew", "Tom")
SyntaxError: non-default argument follows default argument

상위 코드는 SyntaxError가 발생하였다. default value parameter를 non-default value parameter 앞으로 변경했기 때문이다. 파이썬에서 함수를 정의할 때 파라미터를 받는 순서를 지켜야 한다.

파라미터를 받는 순서는 다음과 같으며 이 순서를 지키지 않을 시 오류가 발생한다.
def example(a, b, c=None, r="w" , d=[], ae, **ab)
a,b : positional parameter
c=none : optional parameter
r="w" : keyword parameter
d=[] : list parameter
ae : keyword-only
**ab : var-keyword parameter

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)
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
-수정된 코드
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("정우성", "01012341234", "seoul", 20)
name=정우성
args=('seoul', 20)
age=01012341234

첫 번째 코드에서는 타입 에러가 발생하였다. 파라미터 순서를 생각하며 *args와 age의 위치를 바꿔 오류를 없앴다.

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")
SyntaxError: invalid syntax
-수정된 코드
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

마찬가지로 파라미터의 위치를 바꿨다.

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")
SyntaxError: invalid syntax
-수정된 코드
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
baik9261@gmail.com

0개의 댓글