Одиночна зірка *
розпаковує послідовність / колекцію в позиційні аргументи, тому ви можете зробити це:
def sum(a, b):
return a + b
values = (1, 2)
s = sum(*values)
Це розпакує кортеж, щоб він насправді виконувався як:
s = sum(1, 2)
Подвійна зірка **
робить те саме, лише використовуючи словник і таким чином названі аргументи:
values = { 'a': 1, 'b': 2 }
s = sum(**values)
Ви також можете поєднувати:
def sum(a, b, c, d):
return a + b + c + d
values1 = (1, 2)
values2 = { 'c': 10, 'd': 15 }
s = sum(*values1, **values2)
буде виконуватися як:
s = sum(1, 2, c=10, d=15)
Також див. Розділ 4.7.4 - Розпакування списків аргументів документації Python.
Крім того, ви можете визначити функції, що приймаються, *x
і **y
аргументи, це дозволяє функції приймати будь-яку кількість позиційних та / або іменованих аргументів, які конкретно не названі в декларації.
Приклад:
def sum(*values):
s = 0
for v in values:
s = s + v
return s
s = sum(1, 2, 3, 4, 5)
або з **
:
def get_a(**values):
return values['a']
s = get_a(a=1, b=2)
це може дозволити вам вказати велику кількість необов’язкових параметрів без необхідності їх декларувати.
І знову можна поєднати:
def sum(*values, **options):
s = 0
for i in values:
s = s + i
if "neg" in options:
if options["neg"]:
s = -s
return s
s = sum(1, 2, 3, 4, 5)
s = sum(1, 2, 3, 4, 5, neg=True)
s = sum(1, 2, 3, 4, 5, neg=False)