parameter vs. argument

parameter 는 사용자 함수에서 함수 정의시 지정된 이름. 아래 예시에서 name 과 age가 parameters

def func(name, age)

argument 는 실제 사용자가 함수를 call 할 때, 함수에서 사용되길 바라는 값. 아래에서 "김댕댕"과 8.

func("김댕댕", 8)


왜 default value parameter를 non-default value parameter 앞에 정의 하면 안될까?

default value 는 사용자 함수에서 '='로 값을 받은 parameter 를 가리킨다.

def func(name, age = "8")

name은 non-default value parameter로 함수를 call 할 때 값이 주어져야하는 parameter 이지만 age는 8이 default 값으로 설정되어 있으므로 함수 call시 입력하지 않아도 무방. 입력하지 않을 시 8로 함수가 실행되고, 다른 값을 원한다면 func("김댕댕", 7)과 같이 입력하면 된다.

이렇게 default parameter를 사용하게되면 parameter들의 순서에 유의해야한다. default parameter 의 경우 값이 주어져도 안주어져도 무방하기때문에 non-default 앞에 위치할 경우 어떤 값이 어떤 parameter에 들어가는지 알기 어렵게된다. python에서는 이러한 오류를 방지하기 위해 non-default value parameter 는 반드시 default value parameter 앞에 오도록 설정하고, 순서가 바뀌면 오류를 내보낸다.

python에서 정의해놓은 parameter의 우선순위:

def example(a, b, c=None, r="w" , d=[], ae, **ab):
(a,b) are positional parameter
(c=none) is optional parameter
(r="w") is keyword parameter
(d=[]) is list parameter
(
ae) is keyword-only
(**ab) is var-keyword parameter


positional argument vs. variable length arguments

positional argument (위치 인자)는 사용자 함수에서 전달되는 값이 순서대로 전달되는 인자를 뜻하며, 가장 일반적으로 사용되는 방식이다. "김댕댕", 8.

def func(name, age)

func("김댕댕", 8)

variable length arguments는 인자의 갯수가 정해지지않은 함수의 parameter 에 들어가는 값(들)이다. *args, **kwargs

def func(name, *args)

func("김댕댕", "치킨껌", "땅콩이", "산책")

variable length argument도 갯수가 정해지지않고 변동가능하기 때문에 default parameter와 같이 앞에 사용하면 어디까지가 variable length argument고 어디부터가 positional argument 인지 명확히 알기 어렵다. 따라서 variable argument는 반드시 positioanl argument 뒤에 위치해야한다.

위에 작성한 'python에서 정의해놓은 parameter의 우선순위'에 명시되었듯, positional argument, default argument, variable length argument 순서로 정의해야한다.

0개의 댓글