Python-Function Parameters

김경천·2021년 5월 17일
0

Function Parameters

함수는 input parameter를 받아서 return 값을 output으로 리턴합니다.
그리고 함수를 호출할 때 parameter를 함수에 전달해서 호출하게 됩니다.
python 함수의 가장 기본적인 형태는 다음과 같습니다.

def dogcat(dog, cat):
    print(f"{dog} 그리고 {cat}")
    
dogcat("강아지","고양이")

결과는 강아지 그리고 고양이가 나오게된다.

Keyword Arguments

위의 경우 처럼 순서에 맞추어서 parameter 값을 전해주지 않을수 있는 방법도 있습니다.

순서 대신에 parameter 이름으로 맞추어서 값을 전해줄 수 있으며, 이를 keyword argments 라고 합니다.

Keyword arguments 방식으로 parameter 값을 전해주면 실제 parameter 순서가 바뀌어도 괜찮습니다.

def dogcat(dog, cat):
    print(f"{dog} 그리고 {cat}")
    
dogcat(cat="고양이", dog="강아지")

순서를 맞춰서 parameter 값을 전해주는 positional arguments와 keyword arguments를 혼용하여 사용하는 것도 가능합니다.
주의할 점은 keyword arguments 는 순서가 바뀌어도 상관없지만 positional arguments 부분은 순서를 지켜줘야 합니다.

Parameter Default Value

함수의 parameter 에 default 값을 정의 해주면 함수가 호출될 때 값이 넘겨지지 않아도 default 값이 자동으로 넘겨지게 됩니다.

def dogcat(dog, cat="고양이"):
    print(f"{dog} 그리고 {cat}")
    
dogcat("강아지")

cat에 default 값을 정의 해주었기 때문에 결과는 위에서 했던 것과 같이
'강아지 그리고 고양이' 그대로 출력됩니다.
하지만 여기서도 주의할 점은 default 값이 정의된 parameter가 default 값이 정의되지 않은 parameter보다 먼저 선언되면 에러가 발생합니다.

Assignment

1. default value parameter를 non-default value parameter 앞에 정리하면 안되는 이유

default 값이 정의된 parameter가 default 값이 정의 되지 않은 parameter보다 먼저 위치해 있으면 안된다.

왜냐하면 default value parameter를 non-default value parameter 앞에 선언하면 syntax error가 납니다.

def dogcat(dog="강아지", cat):
  print(f"{dog} 그리고 {cat}")

SyntaxError: non-default argument follows default argument

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'

오류가 나는 이유: args가 정해지지 않은 가변적인 인수이기 때문이다.
args가 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("정우성", "01012341234", "seoul", 20)

args와 age의 위치만 바꿔주면된다!

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

SyntaxError: invalid syntax
이 코드도 마찬가지로 가변인수가 위치하고 마지막으로 address가 위치해 있기 때문에 오류가 발생한다.

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

이 역시 가변인수와 address의 위치를 변경해주면 오류가 발생하지 않는다. 이때 address는 default값을 가지므로 position인 name, age 보다 뒤에 써주어야 한다.

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

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

position인 age를 맨 앞으로 옮겨주고, address는 입력값에서 정의되었기 때문에 *args와**kwargs사이에 배치하면 된다.

profile
화이팅

0개의 댓글