ฉันต้องการเพิ่มคำตอบอีกหนึ่งข้อ:
มันเกิดขึ้นเมื่อคุณพยายามส่งพารามิเตอร์ตำแหน่งที่มีคำสั่งผิดตำแหน่งพร้อมกับอาร์กิวเมนต์คำหลักในฟังก์ชั่นการโทร
there is difference between parameter and argument
คุณสามารถอ่านรายละเอียดเกี่ยวกับที่นี่อาร์กิวเมนต์และพารามิเตอร์เป็นไพ ธ อน
def hello(a,b=1, *args):
print(a, b, *args)
hello(1, 2, 3, 4,a=12)
เนื่องจากเรามีสามพารามิเตอร์:
a คือพารามิเตอร์ตำแหน่ง
b = 1 คือคำหลักและพารามิเตอร์เริ่มต้น
* args เป็นพารามิเตอร์ความยาวผันแปร
ดังนั้นก่อนอื่นเรากำหนดพารามิเตอร์เป็นตำแหน่งหมายความว่าเราต้องให้ค่ากับอาร์กิวเมนต์ตำแหน่งในคำสั่งตำแหน่งของมันที่นี่มีคำสั่ง แต่เรากำลังผ่านอาร์กิวเมนต์ 1 ที่ฟังก์ชัน a ในการเรียกจากนั้นเราจะให้ค่าแก่ a ซึ่งถือเป็นอาร์กิวเมนต์ของคำหลัก ตอนนี้มีสองค่า:
หนึ่งคือค่าตำแหน่ง: a = 1
ที่สองคือค่าคีย์เวิร์ดซึ่งเป็น = 12
สารละลาย
เราต้องเปลี่ยนhello(1, 2, 3, 4,a=12)
เป็นhello(1, 2, 3, 4,12)
ดังนั้นตอนนี้ a จะได้รับค่าตำแหน่งเดียวซึ่งคือ 1 และ b จะได้รับค่า 2 และค่าที่เหลือจะได้รับ * args (พารามิเตอร์ความยาวผันแปร)
ข้อมูลเพิ่มเติม
ถ้าเราต้องการ * args ควรได้ 2,3,4 และ a ควรได้ 1 และ b ควรได้ 12
จากนั้นเราสามารถทำสิ่งนี้ได้
def hello(a,*args,b=1):
pass
hello(1, 2, 3, 4,b=12)
มีอะไรเพิ่มเติม:
def hello(a,*c,b=1,**kwargs):
print(b)
print(c)
print(a)
print(kwargs)
hello(1,2,1,2,8,9,c=12)
ผลลัพธ์:
1
(2, 1, 2, 8, 9)
1
{'c': 12}
self
this