*args (arguments)
Python ์ฝ๋๋ฅผ ์์ฑํ ๋, ํจ์์ ์ธ์(arguments)๊ฐ ๋ช๊ฐ ์ ๋ ฅ๋ ์ง ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค.
์๋ฅผ ๋ค์ด, ๊ฐ์กฑ ๊ตฌ์ฑ์์ ์ ๋ ฅํ๋ฉด ๊ทธ๋๋ก ์ถ๋ ฅํ๋ ํจ์๊ฐ ์๋ค๋ฉด, ๊ฐ์ธ๋ณ๋ก ๊ฐ์กฑ์ ๊ตฌ์ฑ์ ์๋ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ธ์๊ฐ ์ด ๋ช๊ฐ ์ ๋ ฅ๋ ์ง๋ ์ ์ ์๋ค.
์ธ๊ณ์ ๋ชจ๋ ๊ฐ์กฑ์ด 4๋ช ์ผ๋ก๋ง ์ด๋ฃจ์ด์ ธ ์๋ค๋ฉด, ์ฐ๋ฆฌ๊ฐ ์๋ ๊ฒ ์ฒ๋ผ ๋ค์๊ณผ ๊ฐ์ด ํจ์๋ฅผ ์งค ์ ์๋ค.
def family(dad, mom, sibling, me):
print(dad, mom, sibling, me)
family("๊น๋ฒ์", "์ด์๋ผ", "๋ฐํจ์ ", "์ฅ๋ฒ์ค")
# output: ๊น๋ฒ์ ์ด์๋ผ ๋ฐํจ์ ์ฅ๋ฒ์ค
ํ์ง๋ง ๋น์ฐํ ์ธ์์ ๋ชจ๋ ๊ฐ์กฑ ๊ตฌ์ฑ์์ ์๊ฐ ๋ค๋ฅด๊ณ , ์ด๋ด ๊ฒฝ์ฐ *args๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
*args์ args๋ arguments๋ฅผ ์ค์ธ ๊ฒ์ด๋ค.
args์ ํน๋ณํ ๊ธฐ๋ฅ์ด ์๋ ๊ฒ์ ์๋๊ณ , ์ฃผ๋ก ์ฌ์ฉ๋๋ ์ด๋ฆ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๋ค์ ๋งํด, *args๋ก ์ฐ๋ *name์ผ๋ก ์ฐ๋ *numbers ์ดํ์ ํํ๋ง ๋ง์ถ๋ค๋ฉด ๋ฌธ์ ๊ฐ ์๋ค.
*args์ ์ ๋ ฅ ๊ฐ์ tuple์ ํํ๋ก ์ ์ฅ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๋จ์ํ print(args)๋ฅผ ํ๋ฉด, ์ ๋ ฅํ๋ ๊ฐ๋ค์ด tuple์ ํํ๋ก ์ถ๋ ฅ๋๋ค.
def numbers(*nums):
print(nums)
numbers(1, 2, 3, 4)
# output: (1, 2, 3, 4)
๊ทธ๋ฌ๋ฏ๋ก, ๊ฐ๊ฐ์ ์ ๋ ฅ ๊ฐ์ ๋ฐ๋ก ์ฒ๋ฆฌํ๊ณ ์ถ๋ค๋ฉด, ํจ์ ๋ด์ ๋ฐ๋ณต๋ฌธ์ ๋ฃ์ผ๋ฉด ๋๋ค.
def add_1(*nums):
for num in nums:
print(num + 1, end=" ")
add_1(1, 2, 3, 4)
#output: 2 3 4 5
์ด๋ฅผ ํ์ฉํด์ ์ฒซ๋ฒ์งธ ํจ์๋ฅผ ๋ค์ ์ง๋ฉด,
def family(*members):
for member in members:
print(member, end=" ")
family("mother", "father", "me")
#output: mother father me
family("mother", "me", "brother", "sister")
#output: mother me brother sister
family("grandmother", "grandfather", "father", "uncle", "sister", "brother", "me")
#output: grandmother grandfather father uncle sister brother me
์ด๋ ๊ฒ ์ธ์์ ๊ฐ์๋ฅผ ๋ชจ๋ฅผ ๋๋ ํ์ฉํ ์ ์๋ค.
์ ๋ ฅ๋ฐ์ ์๋ฅผ ๋ชจ๋ ๋ํด์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์ง๋ณด์๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ์งค ์ ์๋ค.
def add(*args):
result = 0
for num in args:
result += num
return result
print(add(1, 2, 3))
# output: 6
print(add(300, 100, 30, 3, 500))
# output: 933
*kwagrs (key word arguments)**
kwargs๋ ํค์๋ ๋์ ๋๋ฆฌ๋ฅผ ๋ง๋ค์ด๋ธ๋ค.
*args ์ฒ๋ผ kwargs ๋จ์ด ์์ฒด์ ๊ธฐ๋ฅ์ด ์๋๊ฒ์ ์๋๊ธฐ์, ์ํ๋ ๊ธ์๋ก ๋ฐ๊ฟ์ ์ฌ์ฉํด๋ ๋๋ค.
ํจ์๋ฅผ ๋ณด๋ฉด ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
def calculate(**kwargs):
print(kwargs)
calculate(add=5, multiply=10, divide=2)
# output: {"add": 5, "multiply": 10, "divide": 2}
์ ๋ ฅํ ํค์๋์ ๊ฐ์ผ๋ก ๋์ ๋๋ฆฌ๋ฅผ ๋ง๋ค์ด ๋ด๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ฐฉ๊ธ์ ํจ์๋ฅผ ํ์ฅํด์ ๋์ ๋๋ฆฌ ํํ๋ฅผ ํ์ฉํด ๊ฐ๋จํ ๊ณ์ฐ ๊ณผ์ ์ ํ๋ ํจ์๋ฅผ ๋ง๋ค ์๋ ์๋ค
(์ค์ ๋ก๋ ์ ๋ ์ฌ์ฉ ์ํ๊ฒ ์ง๋ง, kwargs๋ฅผ ์ดํดํ๊ธฐ์ ๋์์ด ๋๋ค)
def calculate(num, **kwargs):
num += kwargs["add"]
num *= kwargs["multiply"]
num /= kwargs["divide"]
print(num)
calculate(3, add=5, multiply=10, divide=2)
# (3 + 5) * 10 / 2 = 40
# output: 40
Class์์์ kwargs
kwargs๋ class ์ ์ธ์์๋ ์ ํ์ฉ๋ ์ ์๋ค.
๋ค์ ์์ ๋ฅผ ๋ณด์.
class Car:
def __init__(self, **kw):
self.model = kw["model"]
self.company = kw["company"]
self.color = kw["color"]
first_car = Car(company="Hyundai", model="Santafe", color="black")
print(first_car.company, first_car.model, first_car.color)
#output: Hyundai Santafe black
ํด๋์ค๋ฅผ ์ ์ธํ๊ณ ์ด๊ธฐํํ ๋ ์์ฃผ ์ฌ์ฉํ๋ ํํ๊ฐ ๋ณด์ธ๋ค.
ํ์ง๋ง ์ด๋ ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ์ด ์๋๋ค.
์ด์ ๋ฅผ ์์๋ณด๊ธฐ ์ํด ์ฌ๊ธฐ์ ๋ง์ฝ์ keyword์ค์ ํ๋๋ผ๋ ๋นผ๋จน๋๋ค๋ฉด ๋ฌด์จ ์ผ์ด ๋ฐ์ํ ๊น?
class Car:
def __init__(self, **kw):
self.model = kw["model"]
self.company = kw["company"]
self.color = kw["color"]
first_car = Car(company="Hyundai", model="Santafe")
print(first_car.company, first_car.model, first_car.color)
#KeyError: 'color'
KeyError: keyword ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์๋ kw["color"] ๋ง๊ณ ๋ค๋ฅธ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๊ฒ์ get() ๋ฉ์๋์ด๋ค.
class Car:
def __init__(self, **kw):
self.model = kw.get("model")
self.company = kw.get("company")
self.color = kw.get("color")
first_car = Car(company="Hyundai", model="Santafe")
print(first_car.company, first_car.model, first_car.color)
#output: Hyundai Santafe None
get() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด, ํค์๋๋ฅผ ์ ๋ ฅํ์ง ์์์ ๋, ํด๋์ค ์ด๊ธฐํ ๊ณผ์ ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๊ณ ๋์ None ๊ฐ์ด ์ ์ฅ๋๋ค.
์ด๊ฒ์ ์ ํ์ ์ธ์๊ฐ ๋ง์ ํด๋์ค์์ ํํ ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ฌผ๋ก , ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํด์ ์ด๊ธฐํํ๋ ๋ฐฉ๋ฒ๋ ๊ฐ๋ฅํ๋ค.
class Car:
def __init__(self, company="Hyundai",**kw):
self.model = kw.get("model")
self.company = company
self.color = kw.get("color")
car1 = Car(color="blue", company="Ferrari")
car2 = Car(color="purple", model="GV80")
car3 = Car()
print(car1.color, car1.company, car1.model)
# output: blue Ferrari None
print(car2.color, car2.company, car2.model)
# output: purple Hyundai GV80
print(car3.color, car3.company, car3.model)
# output: None Hyundai None
์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์ง๋ฉด, self.company ๊ฐ์ ๋ํด์๋ kw์ ์ฌ์ฉํ์ง ์๊ณ , ์ฐ๋ฆฌ๊ฐ ์๋ ์ด๊ธฐํ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ ์๋ ์๋ค.