Python - Parameter

이주명·2021년 11월 8일
0
post-custom-banner

파이썬에서 함수를 정의할때 파라미터(인수)를 input으로 넣어 어떤 계산이나 기능을 실행후 결과값(output)을 얻어낸다.

(옵션)
return : 함수 실행시 결과물을 밖으로 꺼내어 사용.
parameter : 함수 생성시 함수명 옆에 넣어주는 인자.

오늘 주제는 함수에 전달되는 파라미터에 대해 알아보겠습니다.
파이썬은 파라미터의 종류로

1.Regular positional argument

def name_function(my_name, your_name)

name_function("고기맨","고기몬")

=> my_name == "고기맨 / your_name == "고기몬"
값이 저장됩니다.
(순서에 따라)

기본 변수를 칭하는 Regular positional argument입니다.
my_name 과 your_name에 어떤 타입의 값도 입력 받을수 있습니다.

2. Keyword Argument

def name_function(my_name, your_name)

name_function(your_name="고기맨", my_name="고기몬")

함수를 이용할 때 파라미터 변수 이름을 지정해서 값을 넣을수 있습니다. 이렇게 함으로써 가독성과 위의 보기처럼 값의 순서가 바뀌어도 key값을 따라 value가 저장되기 때문에 유용하게 사용할수 있다.

3. Positional Arg + Keyword Arg

def name_function(my_name, your_name)

name_function("고기맨", your_name="고기몬")

positional Arg 와 keyword Arg를 혼용해서 사용할 수 있습니다.
이때 주의할 점은 positional Arg의 순서는 함수가 정의 될때의 파라미터 위치와 같아야합니다.
Error 예시

def name_function(my_name, your_name)

name_function(your_name="고기몬", "고기맨")

이렇게 입력하게되면 my_name에 들어가야할 위치에 your_name="고기몬"이 위치하기 때문에 에러가 발생합니다.

key 와 positional args를 혼용해서 사용할때는 순서를 조심합니다.

4. Parameter Default Value

def name_function(my_name, your_name="고기맨")

name_function(my_name="고기몬")

함수 생성시 파라미터에 default값을 정의해서 함수 실행시 2개의 파라미터를 요구하지만 1개의 파라미터 값만 넘겨서 사용할 수 있습니다.

문제1

함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 안 되는 이유

Error 예시

def name_function(your_name="고기맨", my_name)

name_function("고기몬")

my_name에 "고기몬" 이라는 값을 정의하고 싶은데 함수 parameter 위치가 올바르지 않다.

예시와 같이 파라미터 내부의 인자 중 default argument가 앞 쪽에 위치하게 된다면 인자가 들어갈 곳이 애매해진다.

이러한 일들을 방지하고자 함수에서 non-default value parameter를 앞 부분으로 오도록 설계해야한다.

문제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: 하나의 keyword arg가 빠졌다고 나온다.
이 뜻은 중간에 가변인수(*arg)가 있기 때문에 파이썬은 어디서 가변인수가 끝나는 지점인지 알수가 없다.
따라서 가변인수를 마지막에 써줌으로 문제를 해결할수 있다.

문제3

가변 키워드 인수 (variable length keyword arguments)의 위치 에러를 고쳐 정상적으로 출력되는 결과는?

Error 예시

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를 반환한다. 이는 앞서 말한 문제 2번과 같은 맥락의 오류를 초래한다. 따라서 가변키워드 인수를 마지막으로 이동시켜준다.

문제4

4. 위치 인수와 키워드 가변 키워드 인수 (variable length keyword arguments)의 **위치 에러를 고쳐 정상적으로 출력되는 결과는?

Error 예시

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(age, name="아이유", *args, address, **kwargs)

가 되겠다.

아래의 이미지를 참고하면 파라미터들의 순서를 이해할수 있을 것이다.

Python Function Definition, Arguments Kind and Order

profile
oh yeah
post-custom-banner

0개의 댓글