Найпростіший спосіб завершити функцію
func(*args, **kwargs)
... це вручну написати обгортку, яка б викликала func () всередині себе:
def wrapper(*args, **kwargs):
# do something before
try:
return func(*a, **kwargs)
finally:
# do something after
У Python функція є об'єктом, тому ви можете передати це ім'я як аргумент іншої функції та повернути його. Ви також можете написати генератор обгортки для будь-якої функції anyFunc () :
def wrapperGenerator(anyFunc, *args, **kwargs):
def wrapper(*args, **kwargs):
try:
# do something before
return anyFunc(*args, **kwargs)
finally:
#do something after
return wrapper
Зауважте також, що в Python, коли ви не знаєте або не хочете називати всі аргументи функції, ви можете посилатися на набір аргументів, позначених його іменем, перед якими зірочками в дужках після назва функції:
*args
Наприклад, ви можете визначити функцію, яка б приймала будь-яку кількість аргументів:
def testFunc(*args):
print args # prints the tuple of arguments
Python передбачає ще більше маніпулювання аргументами функції. Ви можете дозволити функції приймати аргументи ключових слів. У тілі функції аргументи ключових слів зберігаються у словнику. У дужках після назви функції цей словник позначається двома зірочками, а потім ім'ям словника:
**kwargs
Аналогічний приклад, який друкує словник аргументів ключових слів:
def testFunc(**kwargs):
print kwargs # prints the dictionary of keyword arguments