วิธีที่ง่ายที่สุดในการห่อฟังก์ชั่น
func(*args, **kwargs)
... คือการเขียน wrapper ที่จะเรียกfunc ()ภายในตัวมันเอง:
def wrapper(*args, **kwargs):
# do something before
try:
return func(*a, **kwargs)
finally:
# do something after
ในฟังก์ชั่น Python เป็นวัตถุดังนั้นคุณสามารถส่งมันชื่อเป็นอาร์กิวเมนต์ของฟังก์ชันอื่นและส่งคืน คุณสามารถเขียนตัวสร้าง wrapper สำหรับฟังก์ชั่นใด ๆ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 เมื่อคุณไม่ทราบหรือไม่ต้องการตั้งชื่ออาร์กิวเมนต์ทั้งหมดของฟังก์ชันคุณสามารถอ้างถึง tuple of arguments ซึ่งแทนด้วยชื่อของมันนำหน้าด้วยเครื่องหมายดอกจันในวงเล็บหลัง ชื่อฟังก์ชั่น:
*args
ตัวอย่างเช่นคุณสามารถกำหนดฟังก์ชั่นที่จะรับอาร์กิวเมนต์จำนวนเท่าใดก็ได้:
def testFunc(*args):
print args # prints the tuple of arguments
Python ให้การจัดการกับอาร์กิวเมนต์ของฟังก์ชันมากยิ่งขึ้น คุณสามารถอนุญาตให้ฟังก์ชันรับอาร์กิวเมนต์คำหลักได้ ภายในส่วนของฟังก์ชั่นอาร์กิวเมนต์คำหลักจะถูกเก็บไว้ในพจนานุกรม ในวงเล็บหลังชื่อฟังก์ชันพจนานุกรมนี้ถูกแสดงด้วยเครื่องหมายดอกจันสองตัวตามด้วยชื่อของพจนานุกรม:
**kwargs
ตัวอย่างที่คล้ายกันที่พิมพ์พจนานุกรมอาร์กิวเมนต์คำหลัก:
def testFunc(**kwargs):
print kwargs # prints the dictionary of keyword arguments