Python: Function Parameters

์ด์ง€์—ฐยท2020๋…„ 7์›” 30์ผ
0
post-thumbnail

1. default value parameter & non-default value parameter

๐ŸŽˆ ํ•จ์ˆ˜๋ฅผ ์ •์˜ ํ• ๋•Œ 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 ์ธ์ž๊ฐ€ ๊ฐ’์„ ๋ฐ›์•„๋ฒ„๋ฆด ์ˆ˜ ์žˆ์–ด ์ง€์ผœ์„œ ์จ์•ผ ํ•œ๋‹ค! ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.๋งŒ์•ฝ ์ด ์ƒ๊ฐ์ด ํ‹€๋ ธ์œผ๋ฉด ์–ธ์ œ๋“  ๋ˆ„๊ตฌ๋“  ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

2. ์œ„์น˜ ์ธ์ˆ˜(positional arguments)์™€ ๊ฐ€๋ณ€ ์ธ์ˆ˜(variable length arguments)์˜ ์œ„์น˜

๐ŸŽˆ์˜ค๋ฅ˜๋ฅผ ๊ณ ์น˜๊ณ  ํ˜ธ์ถœํ›„์— ์ถœ๋ ฅ๋˜๋Š” ๊ฒฐ๊ณผ์•Œ๋ ค์ฃผ๊ธฐ!

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๋Š” ์œ„์—์„œ ์„ค๋ช…ํ–ˆ๋“ฏ์ด ํŠœํ”Œ( )ํ˜•ํƒœ๋กœ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

3. ๊ฐ€๋ณ€ ํ‚ค์›Œ๋“œ ์ธ์ˆ˜ (variable length keyword arguments)์˜ ์œ„์น˜

๐ŸŽˆ ์–ด๋–ค์—๋Ÿฌ ์ธ์ง€ ํ™•์ธํ•˜๊ณ  ์—๋Ÿฌ๋ฅผ ๊ณ ์น˜๊ณ  ์ถœ๋ ฅ๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์•Œ๋ ค์ฃผ๊ธฐ

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๋Š” ๋”•์…”๋„ˆ๋ฆฌ{ }ํ˜•ํƒœ๋กœ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

4.์œ„์น˜ ์ธ์ˆ˜์™€ ํ‚ค์›Œ๋“œ ๊ฐ€๋ณ€ ํ‚ค์›Œ๋“œ ์ธ์ˆ˜ (variable length keyword arguments)์˜ ์œ„์น˜

๐ŸŽˆ ์–ด๋–ค์—๋Ÿฌ ์ธ์ง€ ํ™•์ธํ•˜๊ณ  ์—๋Ÿฌ๋ฅผ ๊ณ ์น˜๊ณ  ์ถœ๋ ฅ๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์•Œ๋ ค์ฃผ๊ธฐ

์ด๋ฒˆ์—๋Š” 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(ํ‚ค์›Œ๋“œ ๊ฐ€๋ณ€ ์ธ์ž) ์ˆœ์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

profile
Everyday STEP BY STEP

0๊ฐœ์˜ ๋Œ“๊ธ€