Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

จะตั้งค่าพารามิเตอร์เริ่มต้นให้กับฟังก์ชันใน Python ได้อย่างไร?


การจัดการค่าพารามิเตอร์เริ่มต้นของ Python เป็นหนึ่งในบางสิ่งที่อาจรบกวนโปรแกรมเมอร์ Python ใหม่ส่วนใหญ่ได้

สาเหตุของปัญหาคือการใช้ออบเจกต์ "ไม่แน่นอน" เป็นค่าเริ่มต้น นั่นคือค่าที่สามารถแก้ไขได้ เช่น รายการหรือพจนานุกรม

รายการใหม่จะถูกสร้างขึ้นทุกครั้งที่มีการเรียกใช้ฟังก์ชันหากไม่มีอาร์กิวเมนต์ที่สอง เพื่อให้ผลลัพธ์ที่คาดหวังคือ:

[12]
[43]

รายการใหม่จะถูกสร้างขึ้นครั้งเดียวเมื่อมีการกำหนดฟังก์ชัน และใช้รายการเดียวกันในการเรียกแต่ละครั้ง

อาร์กิวเมนต์เริ่มต้นของ Python จะได้รับการประเมินครั้งเดียวเมื่อมีการกำหนดฟังก์ชัน ไม่ใช่ทุกครั้งที่เรียกใช้ฟังก์ชัน ซึ่งหมายความว่าหากคุณใช้อาร์กิวเมนต์เริ่มต้นที่เปลี่ยนแปลงได้และเปลี่ยนอาร์กิวเมนต์ คุณจะและได้เปลี่ยนออบเจกต์นั้นสำหรับการเรียกใช้ฟังก์ชันในอนาคตทั้งหมดด้วย

เราควรทำอย่างไร

สร้างออบเจ็กต์ใหม่ทุกครั้งที่มีการเรียกใช้ฟังก์ชัน โดยใช้ arg เริ่มต้นเพื่อส่งสัญญาณว่าไม่มีการระบุอาร์กิวเมนต์ (มักไม่มีตัวเลือกที่ดีเลย)

ตัวอย่าง

def func(data=[]):
    data.append(1)
    return data
func()
func()
def append2(element, foo=None):
    if foo is None:
        foo = []
    foo.append(element)
    return foo
print(append2(12))
print(append2(43))

ผลลัพธ์

[12]
[43]