Python์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ค ๋ณด๋ฉด ํจ์์ ์ธ์๋ฅผ ์ ์ฐํ๊ฒ ๋๊ฒจ์ผ ํ๋ ์ํฉ์ด ์์ฃผ ์๊น๋๋ค.
ํนํ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ฃ :
argparse
๋ก ํ์ฑํ ์ปค๋งจ๋๋ผ์ธ ์ธ์๋ฅผ ํจ์์ ๋๊ธฐ๊ณ ์ถ์ ๋์ด๋ด ๋ args
, kwargs
, vars(args)
๋ฅผ ์ดํดํ๊ณ ์ ๋๋ก ํ์ฉํ๋ฉด ์ฝ๋๊ฐ ํจ์ฌ ๊น๋ํ๊ณ ํ์ํํด์ง๋๋ค.
ํ์ง๋ง, ์ค๋ซ๋์ ์ ์ฐ๋ค๋ณด๋ฉด ์ข ์ข ํท๊ฐ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์์ด, ์ด๋ฒ ํฌ์คํ ์ ํตํด ์ด ์ธ ๊ฐ์ง ๊ฐ๋ ์ ์ค์ ์์ ์ ํจ๊ป ์์ธํ ๋ณต์ตํ๋ฉฐ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
โ ์ ์
ํจ์์ ๋งค๊ฐ๋ณ์(parameter)์ ์์๋๋ก ๊ฐ์ ์ ๋ฌํ๋ ์ธ์๋ฅผ ์๋ฏธํฉ๋๋ค.
๐ ์์
def greet(name, age):
print(f"My name is {name} and Iโm {age} years old.")
greet("Alice", 30) # โ
์์น ์ธ์ ์ฌ์ฉ
"Alice"
โ ์ฒซ ๋ฒ์งธ ์์น
์ธ์ โ name
30
โ ๋ ๋ฒ์งธ ์์น
์ธ์ โ age
*args
: ์์น ์ธ์๋ฅผ ํํ๋ก ๋ฐ๊ธฐdef arg_func(*args):
return(print(args))
arg_func(1, 2, 3)
# ์ถ๋ ฅ:
# (1, 2, 3)
๊ฐ๋ง ์ ๋ฌ
ํ๋ ๋ฐฉ์ โ ์์น ์ธ์(Positional Argument)*args
๋ ์ฌ๋ฌ ๊ฐ์ ์์น ์ธ์๋ฅผ ํ๊บผ๋ฒ์ ๋ฐ์ ์ ์๊ฒ ํด์ค๋๋ค.args = (1, 2, 3)
์ด ๋ฉ๋๋ค.def print_args(*args):
for arg in args:
print(arg)
print_args(1, 2, 3)
# ์ถ๋ ฅ:
# 1
# 2
# 3
*args
๋ ํจ์์ ์ ๋ฌ๋ ์ฌ๋ฌ ๊ฐ์ ์์น ์ธ์๋ฅผ ํ๋์ ํํ๋ก ๋ฌถ์ด์ค๋๋ค.args
์ผ ํ์๋ ์์ง๋ง, ๊ด๋ก์ ์ผ๋ก ์ด๋ ๊ฒ ์ฌ์ฉํฉ๋๋ค.โ ์ ์
๋งค๊ฐ๋ณ์์ ์ด๋ฆ์ ๋ช ์ํ์ฌ ๊ฐ์ ์ ๋ฌํ๋ ์ธ์์ ๋๋ค.
๐ ์์
greet(age=30, name="Alice") # โ
ํค์๋ ์ธ์ ์ฌ์ฉ
age=30
โ age
๋งค๊ฐ๋ณ์(ํค์๋ ์ธ์)๋ก ์ง์ ์ ๋ฌ๋จname="Alice"
โ name
๋งค๊ฐ๋ณ์(ํค์๋ ์ธ์)๋ก ์ง์ ์ ๋ฌ๋จ**kwargs
: ํค์๋ ์ธ์๋ฅผ ๋์
๋๋ฆฌ๋ก ๋ฐ๊ธฐdef kwarg_func(**kwargs):
return(print(kwargs))
kwarg_func(a=1, b=2, c=3)
# ์ถ๋ ฅ:
# {'a': 1, 'b': 2, 'c': 3}
์ด๋ฆ=๊ฐ ํ์์ผ๋ก ์ ๋ฌ
ํ๋ ๋ฐฉ์ โ ํค์๋ ์ธ์(Keyword Argument)**kwargs
๋ ์ฌ๋ฌ ๊ฐ์ ํค์๋ ์ธ์๋ฅผ ํ๊บผ๋ฒ์ ๋ฐ์ ์ ์๊ฒ ํด์ค๋๋ค.kwargs = {'a': 1, 'b': 2, 'c': 3}
๊ฐ ๋ฉ๋๋ค.def print_kwargs(**kwargs):
for key, value in kwargs.items():
print(f"{key} = {value}")
print_kwargs(name="Alice", age=30)
# ์ถ๋ ฅ:
# name = Alice
# age = 30
**kwargs
๋ ํจ์์ ์ ๋ฌ๋ ์ฌ๋ฌ ๊ฐ์ ํค์๋ ์ธ์๋ฅผ ๋์
๋๋ฆฌ๋ก ๋ฌถ์ด์ค๋๋ค.key=value
ํ์์ ์ธ์๋ค์ ์ฒ๋ฆฌํ ๋ ์ ์ฉํฉ๋๋ค.๊ตฌ๋ถ | ์์ด ๋ช ์นญ | ์ ๋ฌ ํ์ | ์์ ์ค์ ์ฌ๋ถ | ํจ์ ๋ด๋ถ ์ฒ๋ฆฌ | ์์ |
---|---|---|---|---|---|
์์น ์ธ์ | Positional Argument | ๊ฐ๋ง | โ ์ค์ | *args โ tuple | arg_func(1, 2, 3) |
ํค์๋ ์ธ์ | Keyword Argument | key=value ํ์ | โ ์ค์ํ์ง ์์ | **kwargs โ dict | kwarg_func(a=1, b=2, c=3) |
์์ 1.
def greet(name, age):
print(f"Hello, I'm {name} and I'm {age} years old.")
info = ("Alice", 30)
greet(*info) # ์์น ์ธํจํน
data = {"name": "Alice", "age": 30}
greet(**data) # ํค์๋ ์ธํจํน
โ ํต์ฌ:
*
๋ ํํ โ ์์น ์ธ์,**
๋ ๋์ ๋๋ฆฌ โ ํค์๋ ์ธ์๋ก ๋ณํํด ์ค๋๋ค.
์์ 2.
def foo(*args, **kwargs):
print("args:", args)
print("kwargs:", kwargs)
foo(1, 2, 3, a=10, b=20)
# ์ถ๋ ฅ:
# args: (1, 2, 3)
# kwargs: {'a': 10, 'b': 20}
1, 2, 3
โ ์์น ์ธ์๋๊น ์ ๋ถ args = (1, 2, 3)
a=10, b=20
โ ํค์๋ ์ธ์๋๊น ์ ๋ถ kwargs = {'a':10, 'b':20}
-> ์ด๊ฑธ "์์์" ํด์ฃผ๋ ๊ฒ Python์ ํจ์ ํธ์ถ ์ธํฐํ์ด์ค์ ์๋ ์ธํจํน ๋ฉ์ปค๋์ฆ์ ๋๋ค.
argparse
+ **vars(args)
๋ค์์ ์ปค๋งจ๋๋ผ์ธ์์ ์ธ์๋ฅผ ๋ฐ์ ์๊ณ์ด ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ์คํฌ๋ฆฝํธ ์์ ์ ๋๋ค.
generate_series.py
import argparse
def generate_time_series_with_anomalies(num_points,
anomaly_rate,
anomaly_range,
anomaly_length,
freq, amp, slope):
(์ค๋ต ...)
return [], []
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--num_points', type=int, default=1000)
parser.add_argument('--anomaly_rate', type=float, default=0.01)
parser.add_argument('--anomaly_range', type=eval, default=(2, 3))
parser.add_argument('--anomaly_length', type=int, default=6)
parser.add_argument('--freq', type=int, default=20)
parser.add_argument('--amp', type=float, default=0.4)
parser.add_argument('--slope', type=float, default=0.0)
args = parser.parse_args()
# ๐ก ํต์ฌ ํฌ์ธํธ: args๋ฅผ ๋์
๋๋ฆฌ๋ก ๋ณํํ๊ณ ์ธํจํน
generate_time_series_with_anomalies(**vars(args))
**vars(args)
๊ฐ ์ ์ฉํ ๊น?argparse
๋ args
๋ผ๋ Namespace ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.vars(args)
๋ ์ด Namespace ๊ฐ์ฒด๋ฅผ ๋์
๋๋ฆฌ๋ก ๋ณํํฉ๋๋ค.**vars(args)
๋ฅผ ํตํด ํด๋น ๋์
๋๋ฆฌ๋ฅผ ํจ์์ ์ธํจํนํ๋ฉด ๊ฐ ํค์๋๋ฅผ ์ธ์๋ก ๋๊ธธ ์ ์์ต๋๋ค.์์ฒ๋ผ ์ปค๋งจ๋๋ผ์ธ์์ ์ต์ ์ ์ฃผ๋ฉด ์๋์ผ๋ก ํจ์ ์ธ์์ ๋งคํ๋์ด ๋๊ฒจ์ง๋๋ค.
๊ฐ๋ | ์ค๋ช |
---|---|
*args | ์ฌ๋ฌ ๊ฐ์ ์์น ์ธ์๋ฅผ ํํ๋ก ๋ฐ์ |
**kwargs | ์ฌ๋ฌ ๊ฐ์ ํค์๋ ์ธ์๋ฅผ ๋์ ๋๋ฆฌ๋ก ๋ฐ์ |
* | ํํ์ ์์น ์ธ์๋ก ์ธํจํน |
** | ๋์ ๋๋ฆฌ๋ฅผ ํค์๋ ์ธ์๋ก ์ธํจํน |
vars(args) | Namespace โ dict ๋ณํ (argparse์ ํจ๊ป ์์ฃผ ์ฌ์ฉ๋จ) |
argparse
๋ฅผ ์ธ ๋ **vars(args)
ํจํด์ ์ ๊ทน ํ์ฉํ์ธ์.**kwargs
๋ฅผ ํจ์ ์ ์์ ํฌํจ์ํค๋ฉด ์ ์ง๋ณด์์ ๋งค์ฐ ์ ๋ฆฌํฉ๋๋ค.def func(a, b, **kwargs):
์ฒ๋ผ ๊ณ ์ ์ธ์ + ๊ฐ๋ณ ์ธ์๋ฅผ ํผ์ฉํด๋ ์ข์ต๋๋ค.