arg1
, arg2
, args
, kwargs
모두가 파라미터임.def sample(arg1, arg2, *args, **kwargs) :
print("arg1 : " , arg1)
print("arg2 : " arg2)
for i in args :
print("args : ", i)
for key,value in kwargs :
print("kwargs//",key, " : ", value)
파라미터
, 아규먼트
의 차이점은
파라미터
는 함수가 선언/정의 될 때 사용되는 변수명이고,
아규먼트
는 함수를 실행시키기 위해 변수를 대입할 때 들어가는 값(변수) 라는 점이다.
아규먼트
는 파라미터
의 순서를 따라간다. (법칙1)→ 즉,함수에 5가지의 `파라미터`를 선언한다면, 함수 실행시 입력되는 5개의 `아규먼트`는, 실행 시 입력하는 순서(index)대로 함수에 선언된 파라미터에 할당된다.
def sample (ar1, ar2, ar3, ar4, ar5) :
print(ar5)
print(ar3)
print(ar1)
print(ar2)
print(ar4)
sample(0,1,2,3,4)
""" 출력 결과 :
4
2
0
1
3
파라미터
는 함수 선언 시 디폴트 값이 입력되어 있는 상태로 사용할 수 있다.
→ def sample(arg1, arg2, arg=3) :
파라미터
는, 디폴트 값이 없는 파라미터
보다 뒤에 선언되어야 한다. (법칙2)아규먼트
는 함수 사용 시 특정 파라미터를 지정해서 값을 대입하도록, (파라미터
= 값) 의 형태로 사용될 수 있다.
→ sample( 1, 3, arg=10 )
다만 3개의 파라미터
를 선언하고, 3개의 어규먼트
를 선언한 상태에서 서로 순서가 다른 상태에서 어규먼트가 지정을 하게되면, 다음과 같은 오류가 발생한다. :: 한개의 파라미터
에 여러개의 값이 입력되었습니다.
def mixed_params(age, address, name) :
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("address=",end=""), print(address)
mixed_params( 20, "정우성", address="seoul")
# 결과 -> 에러발생 : mixed_params() got multiple values for argument 'address'
—> 따라서, 아예 순서와 관계 없이 아규먼트
를 입력하고 싶다면, 아예 모든 아규먼트
를 키워드와 함께 사용하는 방법이 있을 것이다.
def mixed_params(age, address, name) :
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("address=",end=""), print(address)
mixed_params( age=20, name="정우성", address="seoul")
#결과값
#name=정우성
#age=20
#address=seoul
파이썬에서 얼마만큼의 파라미터
가 입력될 지 모르는 상황에서 사용할 수 있는 문법이다.
텍스트가 꼭 args가 아니어도 괜찮다. → vars, inputs, TT 등 맘대로 사용 가능.
*args가 함수 내에서 사용될 때의 데이터 타입은 튜플이다. (리스트에 사용되는 메서드들 사용 가능하다.)
데이터가 0개가 들어올 수 도 있기 때문에 사용시 주의해야 한다.
Key Word args 의 약자로, 키워드가 들어있는 아규먼트
를 의미한다.
역시 텍스트가 꼭 **kwargs가 아니더라도 괜찮다.
**kwargs가 함수 내에서 사용될 때의 데이터 타입은 딕셔너리 이다. (딕셔너리에 사용되는 메서드들 사용 가능)
데이터가 0개가 들어올 수 도 있기 때문에 사용시 주의해야 한다.
파라미터
들 보다 뒤에 와야 한다. (법칙3)결과적으로 보면, 3가지의 법칙이 있는 것으로 보인다.
아규먼트
는 파라미터
의 순서를 따라간다. (법칙1)
디폴트 값이 있는 파라미터
는, 디폴트 값이 없는 파라미터
보다 뒤에 선언되어야 한다. (법칙2)
*args, **kwargs는 다른 변수가 선언되어 있는 파라미터
들 보다 뒤에 와야 한다. (법칙3)
이 모든 법칙을 지키려고 하면, 함수는 선언 시 반드시 다음과 같은 순서로 파라미터
를 선언해야 한다.
def sample (param1, param2, param3, *args, key1=None, key2=None, **kwargs) :
어규먼트
의 순서는 위와는 다를 수 도 있을 것 같은데 기본적으로 그냥 순서대로 사용 하는것이 가장 마음 편하고 좋을 것 같다.위의 내용을 안지켰을 때 발생하는 오류들