คำตอบของ DSM และ Tadeck ตอบคำถามของคุณโดยตรง
ในสคริปต์ของฉันฉันมักจะใช้ความสะดวกdict.pop()
ในการจัดการกับข้อโต้แย้งที่เป็นทางเลือกและข้อโต้แย้งเพิ่มเติม นี่คือตัวอย่างของprint()
Wrapper แบบธรรมดา:
def my_print(*args, **kwargs):
prefix = kwargs.pop('prefix', '')
print(prefix, *args, **kwargs)
จากนั้น:
>>> my_print('eggs')
eggs
>>> my_print('eggs', prefix='spam')
spam eggs
ดังที่คุณเห็นหากprefix
ไม่มีอยู่ในkwargs
ค่าเริ่มต้น''
(สตริงว่าง) จะถูกเก็บไว้ในprefix
ตัวแปรโลคัล หากมีการกำหนดค่าจะถูกใช้
โดยทั่วไปแล้วนี่เป็นสูตรที่กะทัดรัดและสามารถอ่านได้สำหรับการเขียน wrapper สำหรับฟังก์ชันประเภทใด ๆ : เพียงแค่ส่งผ่านอาร์กิวเมนต์ที่คุณไม่เข้าใจและไม่รู้ด้วยซ้ำว่ามีอยู่จริงหรือไม่ หากคุณผ่าน*args
และ**kwargs
ทำให้โค้ดของคุณช้าลงและต้องพิมพ์เพิ่มอีกเล็กน้อย แต่หากอินเทอร์เฟซของฟังก์ชันที่เรียก (ในกรณีนี้print
) เปลี่ยนไปคุณไม่จำเป็นต้องเปลี่ยนรหัสของคุณ แนวทางนี้ช่วยลดเวลาในการพัฒนาในขณะที่รองรับการเปลี่ยนแปลงอินเทอร์เฟซทั้งหมด