TIL. Python (function Parameters) - 8/3

예흠·2020년 8월 3일
1

wecode

목록 보기
19/43

function Prameters

함수는 input parameter를 받아서 return 값을 output으로 리턴한다고 배웠습니다.
그리고 함수를 호출할때 parameter를 함수에 건내주어서(pass) 호출 한다고 배웠습니다.

가장 기본적인 형태입니다.

순서대로 값이 파라미터로 함수에 전해지는 형태죠.

- Keyword Arguments

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

  • Keyword arguments 방식으로 parameter 값을 전해주면 실제 parameter 순서가 바뀌어도 괜찮습니다. ( 가독성도 높아집니다.)

- Mixing positional arguments and keyword arguments

순서를 맞추어서 parameter 값을 전해주는 positional arguments와 keyword arguments를 혼용하여 사용하는것도 가능합니다.

주의할 점은 keyword Arguments 부분은 순서를 안 지켜도 상관없지만 positional arguments 부분은 순서를 지켜줘야 한다는 것입니다.

- Parameter Default Value

함수의 parameter에 default 값을 정의해 줄 수 도 있습니다.
Default 값이 정의된 paramter는 함수가 호출될때 값이 넘겨지 않아도 괜찮습니다.
값이 넘겨지 않은 경우 default 값이 자동으로 넘겨지게 됩니다.

1. default value parameter vs non-default value parameter

먼저, 파이썬에서 파라미터를 받는 순서는 다음과 같으며 이 순서를 지키지 않을 시 오류가 발생합니다.
(순서도) => def exampla(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

default value parameter를 non-default value parameter앞에 정의하면 오류가 발생하는 이유는 positional arguments 는 위치에 기반한 arguments 이기 때문에 순서를 지키지 않으면 에러가 납니다.
즉, default value parameter가 non default value parameter보다 앞에 있기 때문에 인터프리터가 positional argument들을 읽는데 error를 나게 합니다.

def love_you(my_name = "정우성", your_name): 
    print(f"{my_name} loves {your_name}")

깊게 나아가 파라미터를 정의하는 순서 없이 무작위로 생성 시 함수는 어떤 파라미터에 어떤 값을 받아야 될 지 정할 수 없습니다.

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

가변인수는 여러개의 인수를 가질 수 있기 때문에 모든 인자를 빨아들입니다.
그로 인해 위치인수는 인자를 가질 수 없게 되면서 오류가 발생됩니다.
그래서 이렇게 바꿔주면 됩니다.

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

그럼 결과는

잘 나오네요

3. 가변 키워드 인수의 위치가 어떤에러 인지 확인하고 함수가 호출되도록 에러를 고치고 호출후에 출력되는 결과를 나타내 볼까요

가변키워드 인수는 위치인수와 키워드인수의 뒤에 와야합니다.
가변인수의 위치를 키워드인수의 위치 뒤로 옮기고 호출 시 인자인 '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")

잘 나옵니다

4.위치 인수와 키워드 가변 키워드 인수의 위치가 어떤에러 인지 확인하고 함수가 호출되도록 에러를 고치고 호출후에 출력되는 결과를 봅시다.

  • 위치인수(positional argument)인 'age'는 매개변수 위치 중 가장 먼저 나와야 한다.
  • default value arguments인 name="wecode"는 위치 인수 뒤에 와야 하고 가변인수 앞에 와야 정상적으로 "wecode"값을 받을 수 있다.
  • 가변인수인 *args는 키워드 인수 앞에 와야 한다.
  • 키워드 인수 address는 가변인수 뒤에 와야하고 가변 키워드 인수 앞에 와야 한다.
  • 가변 키워드 인수인 **kwargs는 마지막에 와야 한다.
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개의 댓글