TIL #6 Function Para meters
Parameter 순서
파이썬에서 parameter를 받아야되는 순서는 다음과 같다.
위치 인자 - 기본값 인자 - 가변 인자 - 키워드 인자 - 키워드 가변 인자
def order(a, b, c=None, r="w", d=[], *args, **kargs)
a, b: positional parameter
c=None: optional parameter
r="w": keyword parameter
d=[]: list parameter
*args: keyword-only
**kargs: var-keyword paramter
용어
-
매개변수(parameter) : 함수에 전달된 데이터를 대입하기 위한 변수, 함수 선언 시 작성
-
인자(argument) : 함수에 전달하는 데이터 자체
-
위치 인자(positional argument): 인자와 매개변수에 위치와 일치시키는 인자
-
키워드 인자(keyword argument) : 매개변수에 이름으로 일치시키는 인자
-
가변 인자(variable length positional argument) : 여러 개의 위치 인자를 받을 때 사용, 주로 *args 사용, 튜플로 받음
-
키워드 가변 인자(variable length positional argument) : 여러 개의 키워드 인자를 받을 때 사용, 주로 **kwrags 사용, 딕셔너리로 받음
-
매개변수 기본값(parameter default value) : 함수를 정의할때 기본값 지정, 함수를 사용할때 인자를 보내지않는다면 미리 지정한 기본값을 사용
Default value parameter and Non-default value parameter
함수의 parameter에 default값을 정의해 줄 수 있다. Default 값이 정의된 parameter는 함수가 호출될 때 값이 넘어가지 않아도 된다. 값이 넘겨지지 않은 경우 default값이 자동으로 넘겨지게 된다.
def fact(user, computer = "Mac"):
print(f"Many {user} prefer {computer} than Windows")
fact("Backend-developers")
호출
#"Many Backend-developers prefer Mac than Windows"
⚠️주의) default값이 정의된 parameter가 default값이 정의되지 않은 parameter보다 먼저 위치해 있으면 안된다. 그렇지 않으면 에러가 발생한다.
def fact(user = "Mac", computer):
print(f"Many {user} prefer {computer} than Windows")
fact("Backend-developers")
SyntaxError: non-default argument follows default argument
이와 같이 syntax error가 발생한다.
Positional arguments & Variable length arguments
위치 인수와 가변 인수의 잘못된 위치로 인한 오류.
> 오류 예시
def func_param_with_var_args(name, *args, age):
print("name=", name)
print("args=", args)
print("age=", age)
func_param_with_var_args("김코드", "12345", "Seoul", 30)
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
> 해결 방법1
func_param_with_var_args("김코드", "12345", "Seoul", age=30)
- *args뒤에 있는 age는 키워드 인자가 위치하는 곳이기 때문에 호출시
age=20
으로 해야한다.
> 해결 방법2
def func_param_with_var_args(name, age, *args):
print("name=", name)
print("args=", args)
print("age=", age)
func_param_with_var_args("김코드", 30, "12345", "Seoul")
- age를 위치 인자로 *args 앞에 옮기고 호술시 args보다 앞에 두었다.
Variable length keyword arguments
키워드 가변 인자의 잘못된 위치.
오류 예시
def func_param_with_kwargs(name, age, **kwargs, address=0):
print("name=", name)
print("age=", age)
print("kwargs=", kwargs)
print("address=", print(address)
func_param_with_kwargs("김코드", "20", mobile="12345", address="Seoul")
SyntaxError: invalide syntax
해결 방법
def function_param_with_Kwargs(name, age, address=0, **kwargs):
.
.
.
func_param_with_kwargs("김코드", "20", mobile="12345", address="Seoul")
- 키워드 가변 인자 **kwargs 뒤에는 어떠한 인자도 위치할 수 없다. 함수 정의 시 **kwargs는 맨 뒤에 위치해야 한다.
Positional arguments & Variable length keyword arguments
오류 예시
def mixed_params(name="김코드", *args, age, **kwargs, address):
print("name=", name)
print("args=", args)
print("age=", age)
print("kwargs=", kwargs)
print("address=", address)
mixed_params(20, "박쟝고", "12345", "male" ,mobile="12345", address="seoul")
해결 방법
def mixed_params(age, name="김코드", *args, address, **kwargs):
.
.
.
mixed_params(20, "박쟝고", "12345", "male" ,mobile="12345", address="seoul")
- age를 앞으로 이동시키고(위치 인자로) *kwargs를 맨뒤로 이동시켰다(키워드 전용 인자로).
Author And Source
이 문제에 관하여(TIL #6 Function Para meters), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@tycode4/TIL-6-Function-Para-meters
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def mixed_params(name="김코드", *args, age, **kwargs, address):
print("name=", name)
print("args=", args)
print("age=", age)
print("kwargs=", kwargs)
print("address=", address)
mixed_params(20, "박쟝고", "12345", "male" ,mobile="12345", address="seoul")
def mixed_params(age, name="김코드", *args, address, **kwargs):
.
.
.
mixed_params(20, "박쟝고", "12345", "male" ,mobile="12345", address="seoul")
Author And Source
이 문제에 관하여(TIL #6 Function Para meters), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tycode4/TIL-6-Function-Para-meters저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)