วิธีใช้และบันทึกอาร์กิวเมนต์เริ่มต้นในฟังก์ชัน Python

ธุรกิจ

การตั้งค่าอาร์กิวเมนต์เริ่มต้นในนิยามฟังก์ชัน 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]
Copied title and URL