๐ ์ด ํฌ์คํ ์์๋ Python์ ํจ์์ parameter๋ฅผ ์ฌ์ฉ ๋ ๋ฐ์๋๋ ๋ฌธ์ ์ ๋ํด์ ์ ๋ฆฌํ์์ต๋๋ค.
๐ฅ Parameter์ ์ข ๋ฅ
๐ฅ Parameter ์ฌ์ฉ์ ์ ์ํ ์
โ๏ธ ํจ์์ ์ฌ์ฉํ ๋, ํ๋ผ๋ฏธํฐ์๊ฒ ์ด๋ฆ์ ์ง์ ํด์ ์ ๋ฌํ๋ฉด ์์๋ฅผ ๋ฐ๋ฅด์ง ์์๋ ๊ด์ฐฎ์ต๋๋ค.
def keyword_arguments(name, city, age): return f"{city}์ ์ฌ๋ {age}์ด {name}์ ๋๋ค." print(keyword_arguments(age=99, name='jaewon', city='seoul')) # seoul์ ์ฌ๋ 99์ด jaewon์ ๋๋ค.
โ๏ธ ์์๋ฅผ ๋ง์ถ์ด์ parameter ๊ฐ์ ์ ํด์ฃผ๋ positional arguments์ keyword arguments๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
def mixed_arguments(name, city, age): return f"{city}์ ์ฌ๋ {age}์ด {name}์ ๋๋ค." print(mixed_arguments("jaewon", age=99, city='seoul')) # seoul์ ์ฌ๋ 99์ด jaewon์ ๋๋ค.
โ๏ธ ๋จ, positional arguments์ ์์๋ฅผ ๋ง์ถ์ง ์์ผ๋ฉด SyntaxError๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ํผ์ฉํด์ ์ฌ์ฉํ ๋์๋ ์์น์ ์ ์ํด์ผํฉ๋๋ค.
def mixed_arguments(name, city, age): return f"{city}์ ์ฌ๋ {age}์ด {name}์ ๋๋ค." print(mixed_arguments(age=99, "jaewon", city='seoul')) # SyntaxError: positional argument follows keyword argument
โ๏ธ ํ๋ผ๋ฏธํฐ๊ฐ ์ ๋ฌ๋์ง ์์ ๊ฒฝ์ฐ, ๋ฐ์๋๋ ์๋ฌ๋ฅผ ์๋ฐฉํ๊ธฐ ์ํด์ ๊ฐ์ด ์ ๋ฌ๋์ง ์์ ๋ ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํ ์ ์์ต๋๋ค.
def default_arguments(name="jaewon"): return f"๋ฐ๊ฐ์ต๋๋ค. ๋ฐฑ์๋ ๊ฐ๋ฐ์ {name}์ ๋๋ค." print(default_arguments()) # ๋ฐ๊ฐ์ต๋๋ค. ๋ฐฑ์๋ ๊ฐ๋ฐ์ jaewon์ ๋๋ค. print(default_arguments("์ฅ์ฌ์")) # ๋ฐ๊ฐ์ต๋๋ค. ๋ฐฑ์๋ ๊ฐ๋ฐ์ ์ฅ์ฌ์์ ๋๋ค.
โ๏ธ default value parameter์ ๋จผ์ ์์น์ํค๋ฉด, ๋งจ ์ฒซ parameter๊ฐ ์ ๋ฌ๋๊ฑด์ง ์๋์ง ํ๋จํ ์ ์๊ธฐ ๋๋ฌธ์ SyntaxError๋ฅผ ๋ฑ์ด๋ ๋๋ค.
def default_arguments(name="jaewon", age, city): return f"{city}์ ์ฌ๋ {age}์ด {name}์ ๋๋ค." print(default_arguments(age=99, city='seoul')) # SyntaxError: non-default argument follows default argument
โ๏ธ ์ด์ default Value parameter๋ ๋ฐ๋์ non-default value parameter ๋ค์ ๋ฐฐ์น์์ผ์ผํฉ๋๋ค.
def default_arguments(age, city, name="jaewon"): return f"{city}์ ์ฌ๋ {age}์ด {name}์ ๋๋ค." print(default_arguments(age=99, city='seoul')) # seoul์ ์ฌ๋ 99์ด jaewon์ ๋๋ค.
โ๏ธ parameter์ ์ ๋ฌํ argument์ ์๊ฐ ๊ณ ์ ์ ์ด์ง ์์ ๋ ์ฌ์ฉํฉ๋๋ค.
โ๏ธ key์ value๋ก ์ ๋ฌ๋๋ ๊ฐ์ ์์คํ 2๊ฐ๊ฐ ์ฒ๋ฆฌํด์ฃผ๋๋ฐ, args์ kwags๋ ์๋ฌด๊ฑฐ๋ ์ง์ ํ ์ ์์ต๋๋ค.
def variable_length_arguments(*args, **kwargs): return f"*args : {args},\n**kwargs : {kwargs}" print(variable_length_arguments("a", "b", 1, 5, 9, name='์ฌ์', age=99, city="seoul")) """ *args : ('a', 'b', 1, 5, 9), **kwargs : {'name': '์ฌ์', 'age': 99, 'city': 'seoul'} """
โ๏ธ ์๋ ์ฝ๋๋ positional arguments๊ฐ ๋ค ์์นํ๊ธฐ ์ ์ variable length arguments๋ฅผ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ ์๋ฌ๋ฅผ ๋ฐ์์ํต๋๋ค.
โ๏ธ 'age'๋ผ๋ ์ด๋ฆ์ parameter๊ฐ ์ด๋ค ๊ฒ์ธ์ง ์ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
def func_param_with_var_args(name, *args, age): # ๐ ๊ฐ๋ณ์ธ์(*args)๋ ๋ง์ง๋ง์ ์์น์์ผ์ฃผ์ด์ผํฉ๋๋ค. 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'
โ๏ธ ์ด์ positional arguments๋ฅผ ๋จผ์ ์์น์ํค๊ณ , variable length arguments๋ฅผ ์ ์ธํด์ฃผ์ด์ผ ํฉ๋๋ค.
def func_param_with_var_args(name, age, *args): # ๐ ์ด๋ ๊ฒ ํ๋ฉด error์์ฅฌ??? print("name=",end=""), print(name) # name=์ ์ฐ์ฑ print("args=",end=""), print(args) # args=('seoul', 20) print("age=",end=""), print(age) # age=01012341234 func_param_with_var_args("์ ์ฐ์ฑ", "01012341234", "seoul", 20)
โ๏ธ ์๋ ์ฝ๋๋ SyntaxError: invalid syntax ์๋ฌ๊ฐ ๋ฐ์๋ฉ๋๋ค.
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") # SyntaxError: invalid syntax
โ๏ธ positional arguments๋ฅผ ๊ฐ์ฅ ๋จผ์ ์์น์ํค๊ณ , ๊ทธ ๋ค์ default Value arguments, variable length arguments๊ฐ ๋ฐฐ์น๋์ด์ผ ํฉ๋๋ค.
โ๏ธ ๊ทธ ์ด์ ๋
def func_param_with_kwargs(name, age, address=0, **kwargs): # ๐ ์ด๋ ๊ฒ ํ๋ฉด error์์ฅฌ??? print("name=",end=""), print(name) # name=์ ์ฐ์ฑ print("age=",end=""), print(age) # age=20 print("kwargs=",end=""), print(kwargs) # kwargs={'mobile': '01012341234'} print("address=",end=""), print(address) # address=seoul func_param_with_kwargs("์ ์ฐ์ฑ", "20", mobile="01012341234", address="seoul")
โ๏ธ ์๋ ์ฝ๋๋ keyword arguments๊ฐ variable length arguments ๋ณด๋ค ์์ ์ ์ธ๋์๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
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") # SyntaxError: invalid syntax
โ๏ธ keyword arguments์ธ address๋ฅผ *kwargs ์์ ์ ์ธํ ์ด์ ๋ address๊ฐ ํจ์๊ฐ ํธ์ถ๋ ๋ key์ value๋ก ์ ๋ฌ๋์๊ธฐ ๋๋ฌธ์ args ๋ณด๋ค ์์ ์ ์ธ๋๋ฉด python ์ธํฐํ๋ฆฌํฐ๋ ๋ ํผ๋์ค๋ฝ์ต๋๋ค.
def mixed_params(age, name="์์ด์ ", *args, address, **kwargs): # ๐ ์ด๋ ๊ฒ ํ๋ฉด error์์ฅฌ??? print("name=",end=""), print(name) # name=์ ์ฐ์ฑ print("args=",end=""), print(args) # args=('01012341234', 'male') print("age=",end=""), print(age) # age=20 print("kwargs=",end=""), print(kwargs) # kwargs={'mobile': '01012341234'} print("address=",end=""), print(address) # address=seoul mixed_params(20, "์ ์ฐ์ฑ", "01012341234", "male" ,mobile="01012341234", address="seoul")