Function Parameters

tngusl5·2021년 6월 14일
0

Parameter에는 우선순위가 존재한다.
우선순위를 통해 출력값에 Error가 뜨는 경우가 많은데
아래 경우를 통해 학습해보자.


<출처 = getkt.com>

1) positional arguments(위치파라미터)
2) default arguments(default값이 지정된 파라미터)
3) Variavle Length Positional Arguments(가변인수를 받는 파라미터)
4) Non-Default Keyword-Only Arguments(키워드 인수를 받는 파라미터)
5) Keyword-Only Arguments(파라미터가 키워드로 되어있는 인수)
6) Variable Length Keyword Arguments(키워드 가변인수를 받는 파라미터)

1. 함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 안 되는 이유에 대해 생각해보시고 블로깅 해주세요.

def love_you(my_name = "정우성", 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

위의 경우 처럼 default 값이 정의된 parameter가 default 값이 정이 되지 않은
parameter보다 먼저 위치해 있으면 syntaxError가 발생한다.

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)
-------------------------------------------------------------------------------------------------------------------------- 
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'

라고 Error가 뜨는 이유는 *args 와 age의 위치 때문.
위 parameter들의 위치를 바꿔주면

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

라고 정상적으로 출력되는 것을 볼 수 있다.

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")
--------------------------------------------------------------------------------------------------------------------------    
def func_param_with_kwargs(name, age, **kwargs, address=0):
                                                    ^
SyntaxError: invalid syntax

address가 0이라는 default 값을 갖게 되기 때문에 positional parameter인
name, age 뒤에 위치시켜줘야 한다.
address=0 의 위치와 **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")
-------------------------------------------------------------------------------------------------------------------------- 
def mixed_params(name="아이유", *args, age, **kwargs, address):
                                                       ^
SyntaxError: invalid syntax

위와 같이 Syntax Error가 나는 것을 볼 수 있다.
positional parameter인 age를 가장 앞으로 옮겨주고

age, *args, name="아이유", address, **kwargs의 순으로
위치시켜주게 되면

def mixed_params(age, *args, name="아이유", 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
안녕하세요 :)

0개의 댓글