การตั้งค่าอาร์กิวเมนต์เริ่มต้นในนิยามฟังก์ชัน Python จะทำให้มีการใช้ค่าเริ่มต้นหากละเว้นอาร์กิวเมนต์ระหว่างการเรียกใช้ฟังก์ชัน
รายละเอียดต่อไปนี้อธิบายไว้ด้านล่าง
- การตั้งค่าอาร์กิวเมนต์เริ่มต้น
- ข้อจำกัดในตำแหน่งของอาร์กิวเมนต์เริ่มต้น
- โปรดทราบว่าเมื่อใช้รายการหรือพจนานุกรมเป็นค่าเริ่มต้น
การตั้งค่าอาร์กิวเมนต์เริ่มต้น
ถ้าชื่ออาร์กิวเมนต์ = ค่าเริ่มต้นในนิยามฟังก์ชัน ค่าเริ่มต้นจะถูกใช้เมื่อละเว้นอาร์กิวเมนต์ที่เกี่ยวข้อง
def func_default(arg1, arg2='default_x', arg3='default_y'): print(arg1) print(arg2) print(arg3) func_default('a') # a # default_x # default_y func_default('a', 'b') # a # b # default_y func_default('a', arg3='c') # a # default_x # c
ข้อจำกัดในตำแหน่งของอาร์กิวเมนต์เริ่มต้น
การวางอาร์กิวเมนต์เริ่มต้นก่อนอาร์กิวเมนต์ปกติ (อาร์กิวเมนต์ที่ไม่ได้ระบุค่าเริ่มต้น) เมื่อกำหนดฟังก์ชันส่งผลให้เกิดข้อผิดพลาดSyntaxError
# def func_default_error(arg2='default_a', arg3='default_b', arg1): # print(arg1) # print(arg2) # SyntaxError: non-default argument follows default argument
โปรดทราบว่าเมื่อใช้รายการหรือพจนานุกรมเป็นค่าเริ่มต้น
หากมีการระบุวัตถุที่สามารถอัปเดตได้ (เปลี่ยนแปลงได้) เช่น รายการหรือพจนานุกรมเป็นค่าเริ่มต้น วัตถุนั้นจะถูกสร้างขึ้นเมื่อมีการกำหนดฟังก์ชัน จากนั้น เมื่อฟังก์ชันถูกเรียกโดยไม่มีอาร์กิวเมนต์ที่สอดคล้องกัน วัตถุเดียวกันจะถูกใช้
ค่าอาร์กิวเมนต์เริ่มต้นจะถูกประเมินจากซ้ายไปขวาเมื่อดำเนินการนิยามฟังก์ชัน ซึ่งหมายความว่านิพจน์อาร์กิวเมนต์เริ่มต้นจะถูกประเมินเพียงครั้งเดียวเมื่อมีการกำหนดฟังก์ชัน และค่า “คำนวณ” เดียวกันจะถูกใช้สำหรับการโทรแต่ละครั้ง
8.7. Function definitions — Python 3.10.2 Documentation
ตัวอย่างเช่น หากมีการกำหนดฟังก์ชันที่รับรายการหรือพจนานุกรมเป็นอาร์กิวเมนต์เริ่มต้นและเพิ่มองค์ประกอบเข้าไป และถูกเรียกหลายครั้งโดยไม่มีอาร์กิวเมนต์นั้น องค์ประกอบจะถูกเพิ่มไปยังวัตถุเดียวกันซ้ำๆ
ตัวอย่างสำหรับรายการ
def func_default_list(l=[0, 1, 2], v=3): l.append(v) print(l) func_default_list([0, 0, 0], 100) # [0, 0, 0, 100] func_default_list() # [0, 1, 2, 3] func_default_list() # [0, 1, 2, 3, 3] func_default_list() # [0, 1, 2, 3, 3, 3]
ตัวอย่างสำหรับพจนานุกรม
def func_default_dict(d={'default': 0}, k='new', v=100): d[k] = v print(d) func_default_dict() # {'default': 0, 'new': 100} func_default_dict(k='new2', v=200) # {'default': 0, 'new': 100, 'new2': 200}
วัตถุใหม่จะถูกสร้างขึ้นทุกครั้งที่มีการเรียกใช้ฟังก์ชัน
def func_default_list_none(l=None, v=3): if l is None: l = [0, 1, 2] l.append(v) print(l) func_default_list_none() # [0, 1, 2, 3] func_default_list_none() # [0, 1, 2, 3]