파이썬에서 함수를 정의할때 파라미터(인수)를 input으로 넣어 어떤 계산이나 기능을 실행후 결과값(output)을 얻어낸다.
(옵션)
return : 함수 실행시 결과물을 밖으로 꺼내어 사용.
parameter : 함수 생성시 함수명 옆에 넣어주는 인자.
오늘 주제는 함수에 전달되는 파라미터에 대해 알아보겠습니다.
파이썬은 파라미터의 종류로
def name_function(my_name, your_name)
name_function("고기맨","고기몬")
=> my_name == "고기맨 / your_name == "고기몬"
값이 저장됩니다. (순서에 따라)
기본 변수를 칭하는 Regular positional argument입니다.
my_name 과 your_name에 어떤 타입의 값도 입력 받을수 있습니다.
def name_function(my_name, your_name)
name_function(your_name="고기맨", my_name="고기몬")
함수를 이용할 때 파라미터 변수 이름을 지정해서 값을 넣을수 있습니다. 이렇게 함으로써 가독성과 위의 보기처럼 값의 순서가 바뀌어도 key값을 따라 value가 저장되기 때문에 유용하게 사용할수 있다.
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를 혼용해서 사용할때는 순서를 조심합니다.
def name_function(my_name, your_name="고기맨")
name_function(my_name="고기몬")
함수 생성시 파라미터에 default값을 정의해서 함수 실행시 2개의 파라미터를 요구하지만 1개의 파라미터 값만 넘겨서 사용할 수 있습니다.
문제1
Error 예시
def name_function(your_name="고기맨", my_name)
name_function("고기몬")
my_name에 "고기몬" 이라는 값을 정의하고 싶은데 함수 parameter 위치가 올바르지 않다.
예시와 같이 파라미터 내부의 인자 중 default argument가 앞 쪽에 위치하게 된다면 인자가 들어갈 곳이 애매해진다.
이러한 일들을 방지하고자 함수에서 non-default value parameter를 앞 부분으로 오도록 설계해야한다.
문제2
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
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
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)
가 되겠다.
아래의 이미지를 참고하면 파라미터들의 순서를 이해할수 있을 것이다.