๐ ํจ์๋ฅผ ์ ์ ํ ๋ default value parameter๋ฅผ non-default value parameter ์์ ์ ์ ํ๋ฉด ์๋ ๊น์??๐ถ
default๊ฐ์ด ์ ์๋ parameter๊ฐ default๊ฐ์ด ์ ์๋์ง ์์ parameter๋ณด๋ค ๋จผ์ ์์นํด ์์ผ๋ฉด syntax error
๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์
๋๋ค!!
๋ง๋ก๋ง์ผ๋ก๋ ์ดํด๊ฐ ์๋ ์ ์์ผ๋, ์ฝ๋๋ฅผ ์ ๋ ฅํด์ ์ง์ ๋์ผ๋ก ๋ณด์์ต๋๋ค.
์ฝ๋
def wecode(year=2020, month="7",day):
print(f"wecode ๋ค์ด๊ฐ ๋ ์ {year}๋
{month}์ {day}์ผ ์
๋๋ค.")
๊ฒฐ๊ณผ
Traceback (most recent call last):
File "python", line 1
SyntaxError: non-default argument follows default argument
์์ํ๋ ์ค๋ฅ๊ฐ ๋ฌ๋ ๊ฒ ๋ณด์ด์์ฃ ? ๊ทธ๋์ ์ ๋๋ก ๊ฐ์ ๋์ค๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ด default argument๋ฅผ non-default argument๋ค์ ์ฏ๊ฒจ์ ์ฝ๋๋ฅผ ์จ์ผ ํฉ๋๋ค!
์ฝ๋
def wecode(month,day,year=2020):
print(f"wecode ๋ค์ด๊ฐ ๋ ์ {year}๋
{month}์ {day}์ผ ์
๋๋ค.")
wecode(7,20)
๊ฒฐ๊ณผ
wecode ๋ค์ด๊ฐ ๋ ์ 2020๋
7์ 20์ผ ์
๋๋ค.
๐ข.๊ทธ๋์ ์ด๋ ๊ฒ ์ ํด์ง ์์๋ก ํด์ผํ๋ ์ด์ ๊ฐ ๋ญ๊น์?
์ ํํ๊ฒ ์ด๊ฑฐ๋ค!๋ผ๊ณ ํ์ ํด์ ๋ง์ ํ ์ ์๋ค.๊ทธ๋์ ์ฌ๋ฌ ๋ธ๋ก๊ทธ์ ์ ํ๋ธ ์์์ ๋ณด์๋๋ฐ, ๋ง์ฝ ํจ์์ non-default ์ธ์๊ฐ ๊ฐ์ ๋ฐ์ง ์๊ณ , defalut ์ธ์๊ฐ ๊ฐ์ ๋ฐ์๋ฒ๋ฆด ์ ์์ด ์ง์ผ์ ์จ์ผ ํ๋ค! ๊ณ ์๊ฐํ๋ค.๋ง์ฝ ์ด ์๊ฐ์ด ํ๋ ธ์ผ๋ฉด ์ธ์ ๋ ๋๊ตฌ๋ ๋๊ธ๋ก ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํฉ๋๋ค.
๐์ค๋ฅ๋ฅผ ๊ณ ์น๊ณ ํธ์ถํ์ ์ถ๋ ฅ๋๋ ๊ฒฐ๊ณผ์๋ ค์ฃผ๊ธฐ!
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: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
๊ตฌ๊ธ ๊ฒ์ ๊ฒฐ๊ณผ!!!
->func_param_with_var_args ()์ ํ์ ํค์๋ ์ ์ฉ ์ธ์ 1 ๊ฐ๊ฐ ๋๋ฝ๋์์ต๋๋ค : 'age'
์ด์ํ์ง ์๋์? ๐
๋ถ๋ช
์๊ดํธ ์์ 20์ด๋ผ๋ int๊ฐ์ด ๋ค์ด๊ฐ ์๋๋ฐ ์ ๋๋ฝ๋๋ค๋ ๊ฑธ๊น์???
์ค๋ช ์ ํ๊ธฐ ์์์!!๊ฐ๋ณ์ธ์๊ฐ ๋ฌด์์ธ์ง! keyword argument ๋ฌด์์ธ์ง! ๋ positional argument๊ฐ ๋ฌด์์ธ์ง ์ง๊ณ ๋์ด๊ฐ์ผ ํฉ๋๋ค.
๊ฐ๋ณ์ธ์(Variable parameter): ์์น, ํค์๋,์ธ์์ ๊ฐ์๊ฐ ๋ง์์ง๊ฑฐ๋ ์ธ์์ ์๊ฐ ๋ฏธ์ ์ผ ๊ฒฝ์ฐ ๊ฐ๋ณ์ธ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ณต์์ ์ผ๋ฐ ์ธ์
๋ฅผ ์ฌ์ฉ์์๊ฒ ์ ๋ ฅ๋ฐ์์ ์ฌ์ฉํ ๋ ์ฐ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณํํ
๋ก ๋ฐ์ต๋๋ค.
๊ฐ๋ณ์ธ์์๋ *args
์์ต๋๋ค.
๊ฐ๋ณ์์น์ธ์์ธ *args
๋ ์์ ๊ฐ์์ ์์น์ธ์๋ฅผ tupleํํ์ ๋ณ์๋ก ์ ์ฅํฉ๋๋ค.
ํค์๋ ์ธ์(keyword argument) : ํจ์๋ฅผ ํธ์ถํ ๋ ์ธ์์ ๊ฐ, ์ด๋ฆ์ ์ง์ ํ ๊ฐ์ผ๋ก ์ธ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ด๋ฆ์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ฆ,์ธ์์์์ ์์๋๋ก ์ฐ์ธ ๊ทธ๋๋ก ์ ๋ ฅํ์ง ์๊ณ ๋ช ์ํด ์ธ ์ ์์ต๋๋ค. ์ค์ํ ๊ฑด
ํค์๋
๋ก ์ด๋ฃจ์ด์ง๋ณต์์ ์ธ์
๋ฅผ ๋ฐ๋์ต๋๋ค.
ํค์๋์ธ์,**kwargs
๋ ์์๊ฐ์์ ํค์๋์ธ์๋ฅผ dictionary ํํ๋ก ์ ์ฅํฉ๋๋ค.
์์น ์ธ์(positional argument) : ๋ฆฌ์คํธ๋ ํํ๊ณผ ๊ฐ์ด index๊ฐ ์กด์ฌํ๋ ๊ฐ์ฒด '*'ํ์๋ฅผ ๋ถ์ฌ ์ธ์๋ก์ ํจ์์ ์ ๋ ฅ์ ํจ์์ ์ ์๋ ์์น์ ์ ๋ ฅํด์ผ ํฉ๋๋ค. ๋, ํค์๋ ์ธ์์ ํจ๊ป ์ฐ์ผ ์ ์๋๋ฐ, ๊ทธ๋ด ๊ฒฝ์ฐ๋ ์์น ์ธ์ ๋ค์ ํค์๋ ์ธ์๊ฐ ์์ผํฉ๋๋ค.
์์ ๊ฐ๋
์์ Hint๋ฅผ ์ป์ ์ ์์ต๋๋ค. ๋ฌธ์ ์์ **ํค์๋ ์ธ์ ๋ค์ ์์น์ธ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ์๊ฒผ๋ ๊ฒ**
์
๋๋ค. ๊ทธ๋์ ์๋์ ๊ฐ์ด ์์ ํ๋ฉด ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค!!!!
๐จ์์ ๋ ๋ถ๋ถ
def func_param_with_var_args(name, age ,*args):
๊ฒฐ๊ณผ
name=์ ์ฐ์ฑ
args=('seoul', 20)
age=01012341234
*args๋ ์์์ ์ค๋ช ํ๋ฏ์ด ํํ( )ํํ๋ก ๊ฒฐ๊ณผ๊ฐ ๋์์ต๋๋ค.
๐ ์ด๋ค์๋ฌ ์ธ์ง ํ์ธํ๊ณ ์๋ฌ๋ฅผ ๊ณ ์น๊ณ ์ถ๋ ฅ๋๋ ๊ฒฐ๊ณผ๋ฅผ ์๋ ค์ฃผ๊ธฐ
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")
์ค๋ฅ
def func_param_with_kwargs(name, age, **kwargs, address=0):
SyntaxError: invalid syntax
2๋ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์์น์ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค.
**kwargs๊ฐ ๋จผ์ ๋์ ํค์๋ ์ธ์์ ๊ฐ์ ๋์
๋๋ฆฌ์ ๊ฐ์ผ๋ก ๋ฐ์๋๋ฆฌ๊ณ ์ถ๋ ฅํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์์์ ํค์๋ ์ธ์ ๊ฐ์ ๋ค์ ์ธ์์ ๋ฐ๊ฟ์ ์ด๋ค๋ฉด ์์ ์ด ์ ๋ ๊ฒ์
๋๋ค.
๐จ์์ ๋ ๋ถ๋ถ
def func_param_with_kwargs(name, age, address=0,**kwargs ):
๊ฒฐ๊ณผ
name=์ ์ฐ์ฑ
age=20
kwargs={'mobile': '01012341234'}
address=seoul
**kwargs๋ ๋์ ๋๋ฆฌ{ }ํํ๋ก ๊ฒฐ๊ณผ๊ฐ ๋์์ต๋๋ค.
๐ ์ด๋ค์๋ฌ ์ธ์ง ํ์ธํ๊ณ ์๋ฌ๋ฅผ ๊ณ ์น๊ณ ์ถ๋ ฅ๋๋ ๊ฒฐ๊ณผ๋ฅผ ์๋ ค์ฃผ๊ธฐ
์ด๋ฒ์๋ 2,3๋ฒ๊ณผ ๋ค๋ฅด๊ฒ!!์์น์ธ์์ ํค์๋ ์ธ์๊ฐ ํจ๊ป ์ฐ์์ต๋๋ค.๊ทธ๋ ๋ค๋ฉด??๋๋์ฒด ์ด๋ป๊ฒ ๊ณ ์ณ์ผ ํ ๊น์?
age๋ ์ผ๋ฐ์ธ์
name="์์ด์ "๋ default value parameter
*args๋ Variable parameter
**kwargs๋ keyword argument
ํ ......์ฐ์ defalut value parameter๋ positional argument ์์ ์ค๋ฉด ์๋๊ณ ,
*args์ **kwargs๋ error๋ฐ์ํด์ ๋ค์ ๋ฐฐ์นํด์ผํ๋๋ฐ ๋ฉ๋ถ์ด ์์ต๋๋ค.
๊ทธ๋์ ํ๋ฒ์ฉ ๋๋ ค๋ณด๋ฉด ๋ต์ด ๋์ค๊ฒ ์ง?ํ๋ฉด์
4๊ฐ์ ์ฌ๋ฌ ์ธ์๋ค์ ์์๋๋ก ๋ฐ๊พธ๋ค๊ฐ ๋ต์ด ๋์๋ฒ๋ ธ์ต๋๋ค.
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):
๊ฒฐ๊ณผ
name=์ ์ฐ์ฑ
args=('01012341234', 'male')
age=20
kwargs={'mobile': '01012341234'}
address=seoul
๊ทธ๋ฐ๋ฐ, ์ฐ์ฐ์ฐฎ๊ฒ ์ป์ด๊ฑธ๋ฆฐ ๋ต์ด์ง๋ง, ์ ์ด๋ฐ ๊ฒ์ด ๋์๋์ง ๋ชฐ๋ผ์ ๋๊ธฐ๋ค์ ๋ธ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด์ ๊นจ๋ฌ์์ต๋๋ค.
์ adress๊ฐ *args๋ค์ ์ค๋์ง ์ดํด๊ฐ ์๊ฐ์๋๋ฐ,
adress๋ key-only argument
๋ผ๋ ์๋ก์ด ์ฉ์ด๊ฐ ์์์ต๋๋ค.
PEP 570์ด๋ผ๋ ์ฌ์ดํธ๋ฅผ ๋ฐ๊ฒฌํด์ ์ฝ์ด๋ณด์์ต๋๋ค.
๋งค๊ฐ ๋ณ์๊ฐ ํค์๋ ์ธ์๋ก ์ ๋ฌ๋์ด์ผ ํจ์ ํ์ ํ๋ ค๋ฉด ์ฒซ ๋ฒ์งธ ํค์๋ ์ ์ฉ ๋งค๊ฐ ๋ณ์ ๋ฐ๋ก ์์ ์ธ์ ๋ชฉ๋ก์ * ๋ฅผ ๋ฃ์ผ์ญ์์ค.
๊ทธ๋์ adress๋ key-only argument์ด๋ฏ๋ก *args๋ค์ ์์นํด์ผํ๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
์์ผ๋ก๋ ์ด๋ค ์ด์ ๊ฐ ์๋ ๋ฌด์์๋ก ๋๋ฆฌ์ง ๋ง๊ณ ์๊ฐ์ ํ๋ฉฐ ์ค๋ฅ์ ์์ธ์ ๊ณ ์น๋ ค๊ณ ๋ ธ๋ ฅํด์ผ๊ฒ ์ต๋๋ค....
๐์ด์ ๋ ๊ธฐ์ตํ์!
์ผ๋ฐ์ธ์> defalut value parameter> Variable parameter(๊ฐ๋ณ์ธ์)> keyword - only argument>keyword Variable parameter(ํค์๋ ๊ฐ๋ณ ์ธ์) ์์ผ๋ก ์ฒ๋ฆฌ ๊ฐ ๋ฉ๋๋ค.