ฉันไม่เข้าใจตัวอย่างต่อไปนี้สมมติว่าฉันมีฟังก์ชั่นเหล่านี้:
# python likes
def save(filename, data, **kwargs):
fo = openX(filename, "w", **kwargs) # <- #1
fo.write(data)
fo.close()
# python doesnt like
def save2(filename, data, **kwargs):
fo = openX(filename, "w", kwargs) # <- #2
fo.write(data)
fo.close()
def openX(filename, mode, **kwargs):
#doing something fancy and returning a file object
ทำไม # 1 เป็นทางออกที่ถูกต้องและ # 2 ผิด? **kwargsโดยพื้นฐานแล้วมันคือ dict ดังนั้นหากฉันต้องการส่งผ่านข้อโต้แย้งไปยัง openX ฉันคิดว่าวิธีที่ถูกต้องก็คือถ้าไม่มี**และให้แค่ dict แต่หลามเห็นได้ชัดว่าไม่ชอบสิ่งที่สองและบอกฉันฉันให้ 3 แทน 2 ข้อโต้แย้ง ดังนั้นเหตุผลเบื้องหลังนี้คืออะไร
**argsในรหัส นี่อาจเป็นชื่อที่แย่ที่สุดที่ผู้คนจะสับสนกับมัน*args