ใน Python รายการ (อาร์เรย์) ทูเพิล และพจนานุกรมสามารถขยาย (แตกไฟล์) และองค์ประกอบที่เกี่ยวข้องสามารถส่งผ่านร่วมกันเป็นอาร์กิวเมนต์ของฟังก์ชันได้
เมื่อเรียกใช้ฟังก์ชัน ให้ระบุอาร์กิวเมนต์ด้วย * สำหรับรายการและ tuples และ ** สำหรับพจนานุกรม สังเกตจำนวนดอกจัน *
รายละเอียดต่อไปนี้อธิบายไว้ที่นี่
- ขยาย (แกะ) รายการหรือทูเพิลด้วย * (เครื่องหมายดอกจันหนึ่งอัน)
- สำหรับฟังก์ชันที่มีอาร์กิวเมนต์เริ่มต้น
- สำหรับฟังก์ชันที่มีอาร์กิวเมนต์ความยาวผันแปรได้
- ขยาย (แกะ) พจนานุกรมด้วย ** (เครื่องหมายดอกจันสองอัน)
- สำหรับฟังก์ชันที่มีอาร์กิวเมนต์เริ่มต้น
- สำหรับฟังก์ชันที่มีอาร์กิวเมนต์ความยาวผันแปรได้
ดูบทความต่อไปนี้สำหรับการใช้งานพื้นฐานของฟังก์ชัน Python อาร์กิวเมนต์เริ่มต้น และอาร์กิวเมนต์ความยาวผันแปรด้วย *,** เมื่อกำหนดฟังก์ชัน
- ที่เกี่ยวข้อง:วิธีใช้และบันทึกอาร์กิวเมนต์เริ่มต้นในฟังก์ชัน Python
- ที่เกี่ยวข้อง:วิธีใช้อาร์กิวเมนต์ความยาวผันแปรใน Python(
*args
,**kwargs
)
ขยาย (แกะ) รายการหรือทูเพิลด้วย * (เครื่องหมายดอกจันหนึ่งอัน)
เมื่อรายการหรือทูเพิลถูกระบุเป็นอาร์กิวเมนต์ด้วย * รายการนั้นจะถูกขยายและแต่ละองค์ประกอบจะถูกส่งผ่านเป็นอาร์กิวเมนต์แยกกัน
def func(arg1, arg2, arg3):
print('arg1 =', arg1)
print('arg2 =', arg2)
print('arg3 =', arg3)
l = ['one', 'two', 'three']
func(*l)
# arg1 = one
# arg2 = two
# arg3 = three
func(*['one', 'two', 'three'])
# arg1 = one
# arg2 = two
# arg3 = three
t = ('one', 'two', 'three')
func(*t)
# arg1 = one
# arg2 = two
# arg3 = three
func(*('one', 'two', 'three'))
# arg1 = one
# arg2 = two
# arg3 = three
คำอธิบายต่อไปนี้มีไว้สำหรับรายการ แต่จะมีผลเช่นเดียวกันกับทูเพิล
หากจำนวนขององค์ประกอบไม่ตรงกับจำนวนของอาร์กิวเมนต์ จะเกิดข้อผิดพลาด TypeError
# func(*['one', 'two'])
# TypeError: func() missing 1 required positional argument: 'arg3'
# func(*['one', 'two', 'three', 'four'])
# TypeError: func() takes 3 positional arguments but 4 were given
สำหรับฟังก์ชันที่มีอาร์กิวเมนต์เริ่มต้น
หากมีการตั้งค่าอาร์กิวเมนต์เริ่มต้น อาร์กิวเมนต์เริ่มต้นจะถูกใช้หากจำนวนองค์ประกอบไม่เพียงพอ หากองค์ประกอบมีจำนวนมากเกินไป จะเกิดข้อผิดพลาด TypeError
def func_default(arg1=1, arg2=2, arg3=3):
print('arg1 =', arg1)
print('arg2 =', arg2)
print('arg3 =', arg3)
func_default(*['one', 'two'])
# arg1 = one
# arg2 = two
# arg3 = 3
func_default(*['one'])
# arg1 = one
# arg2 = 2
# arg3 = 3
# func_default(*['one', 'two', 'three', 'four'])
# TypeError: func_default() takes from 0 to 3 positional arguments but 4 were given
สำหรับฟังก์ชันที่มีอาร์กิวเมนต์ความยาวผันแปรได้
หากมีการตั้งค่าอาร์กิวเมนต์ความยาวผันแปร องค์ประกอบทั้งหมดหลังจากองค์ประกอบสำหรับอาร์กิวเมนต์ตำแหน่งจะถูกส่งไปยังอาร์กิวเมนต์ความยาวผันแปร
def func_args(arg1, *args):
print('arg1 =', arg1)
print('args =', args)
func_args(*['one', 'two'])
# arg1 = one
# args = ('two',)
func_args(*['one', 'two', 'three'])
# arg1 = one
# args = ('two', 'three')
func_args(*['one', 'two', 'three', 'four'])
# arg1 = one
# args = ('two', 'three', 'four')
ขยาย (แกะ) พจนานุกรมด้วย ** (เครื่องหมายดอกจันสองอัน)
เมื่อมีการระบุพจนานุกรม dict เป็นอาร์กิวเมนต์ด้วย ** คีย์องค์ประกอบจะถูกขยายเป็นชื่ออาร์กิวเมนต์และค่าเป็นค่าอาร์กิวเมนต์ และแต่ละรายการจะถูกส่งผ่านเป็นอาร์กิวเมนต์แยกกัน
def func(arg1, arg2, arg3):
print('arg1 =', arg1)
print('arg2 =', arg2)
print('arg3 =', arg3)
d = {'arg1': 'one', 'arg2': 'two', 'arg3': 'three'}
func(**d)
# arg1 = one
# arg2 = two
# arg3 = three
func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'})
# arg1 = one
# arg2 = two
# arg3 = three
หากไม่มีคีย์ที่ตรงกับชื่ออาร์กิวเมนต์ หรือมีคีย์ที่ไม่ตรงกัน จะเกิดข้อผิดพลาด TypeError
# func(**{'arg1': 'one', 'arg2': 'two'})
# TypeError: func() missing 1 required positional argument: 'arg3'
# func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three', 'arg4': 'four'})
# TypeError: func() got an unexpected keyword argument 'arg4'
สำหรับฟังก์ชันที่มีอาร์กิวเมนต์เริ่มต้น
ภาพที่อัปเดตเฉพาะค่าของชื่ออาร์กิวเมนต์ที่ตรงกับคีย์ในพจนานุกรม
คีย์ที่ไม่ตรงกับชื่ออาร์กิวเมนต์จะส่งผลให้เกิดข้อผิดพลาด TypeError
def func_default(arg1=1, arg2=2, arg3=3):
print('arg1 =', arg1)
print('arg2 =', arg2)
print('arg3 =', arg3)
func_default(**{'arg1': 'one'})
# arg1 = one
# arg2 = 2
# arg3 = 3
func_default(**{'arg2': 'two', 'arg3': 'three'})
# arg1 = 1
# arg2 = two
# arg3 = three
# func_default(**{'arg1': 'one', 'arg4': 'four'})
# TypeError: func_default() got an unexpected keyword argument 'arg4'
สำหรับฟังก์ชันที่มีอาร์กิวเมนต์ความยาวผันแปรได้
หากมีการตั้งค่าอาร์กิวเมนต์ความยาวผันแปร องค์ประกอบใดๆ ที่มีคีย์อื่นที่ไม่ใช่ชื่ออาร์กิวเมนต์ที่ระบุเป็นอาร์กิวเมนต์จะถูกส่งไปยังอาร์กิวเมนต์ความยาวผันแปร
def func_kwargs(arg1, **kwargs):
print('arg1 =', arg1)
print('kwargs =', kwargs)
func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'})
# arg1 = one
# kwargs = {'arg2': 'two', 'arg3': 'three'}
func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three', 'arg4': 'four'})
# arg1 = one
# kwargs = {'arg2': 'two', 'arg3': 'three', 'arg4': 'four'}
func_kwargs(**{'arg1': 'one', 'arg3': 'three'})
# arg1 = one
# kwargs = {'arg3': 'three'}