ใน Python มีอาร์กิวเมนต์สองประเภท:อาร์กิวเมนต์ตำแหน่งและคีย์เวิร์ด อาร์กิวเมนต์เหล่านี้ต้องปรากฏในลำดับเฉพาะ มิฉะนั้น ล่าม Python จะส่งกลับข้อผิดพลาด
ในคู่มือนี้ เราจะพูดถึงข้อผิดพลาด "ตำแหน่งอาร์กิวเมนต์ตามอาร์กิวเมนต์ของคีย์เวิร์ด" และสาเหตุที่ทำให้เกิดข้อผิดพลาด เราจะดูตัวอย่างโค้ดที่มีข้อผิดพลาดนี้เพื่อที่เราจะได้ทราบวิธีแก้ปัญหา
เริ่มกันเลย!
ปัญหา:อาร์กิวเมนต์ตำแหน่งตามอาร์กิวเมนต์ของคีย์เวิร์ด
มาดูข้อผิดพลาดทั้งหมดของเรากัน:
SyntaxError:อาร์กิวเมนต์ตำแหน่งตามอาร์กิวเมนต์ของคีย์เวิร์ด
เช่นเดียวกับภาษาอังกฤษ ภาษาโปรแกรมมีกฎเกณฑ์ของตนเอง กฎเหล่านี้เรียกว่าไวยากรณ์ ข้อผิดพลาดของเราคือข้อผิดพลาดทางไวยากรณ์ ซึ่งหมายความว่าเราไม่สามารถปฏิบัติตามกฎข้อใดข้อหนึ่งที่ควบคุมวิธีเขียนโค้ด Python
ส่วนต่อไปของข้อผิดพลาดของเราบอกเราว่าอะไรเป็นสาเหตุของข้อผิดพลาดนี้ ในกรณีนี้ โค้ดของเราต้องมีอาร์กิวเมนต์ตำแหน่งที่ปรากฏหลังอาร์กิวเมนต์ของคีย์เวิร์ด
อาร์กิวเมนต์ตำแหน่งคืออาร์กิวเมนต์ที่ปรากฏในตำแหน่งที่เกี่ยวข้อง:
def add_numbers(a, b):return a + bมาเรียกฟังก์ชันนี้:add_numbers(2, 3)
"a" และ "b" กลายเป็นตัวแปรภายในฟังก์ชันของเรา รหัสนี้ใช้งานได้เนื่องจากเราได้ระบุอาร์กิวเมนต์ตำแหน่งสองอาร์กิวเมนต์ “a” เท่ากับ 2 และ “b” เท่ากับสาม นอกจากนี้เรายังสามารถระบุอาร์กิวเมนต์เหล่านี้เป็นอาร์กิวเมนต์ของคีย์เวิร์ด:
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
add_numbers(a=2, b=2)
อย่างไรก็ตาม เราไม่สามารถระบุอาร์กิวเมนต์ตำแหน่งก่อนแล้วจึงเปลี่ยนไปใช้ไวยากรณ์ของคีย์เวิร์ด
เนื่องจาก Python มีฟังก์ชันพิเศษที่เรียกว่า *args ซึ่งประมวลผลหลายอาร์กิวเมนต์ในฟังก์ชัน พิจารณารหัสนี้:
def show_users(a, b, *args):พิมพ์ (a, b, *args)
รหัสนี้ใช้ *args คีย์เวิร์ดนี้แสดงถึงจำนวนตัวแปรของอาร์กิวเมนต์ เราสามารถส่งข้อโต้แย้งไปยัง show_users()
. ของเราได้มากเท่าที่ต้องการ ฟังก์ชั่นตามที่เราต้องการ:
show_users("Alex", "Peter", "Violet', "Julie")
รหัสของเราส่งคืน:Alex Peter Violet Julie
อาร์กิวเมนต์สองข้อแรกของเราคือ "a" และ "b" มีค่า "Alex" และ "Peter" ตามลำดับ
นี่เป็นเพราะถ้าคุณใช้ไวยากรณ์ตำแหน่ง อาร์กิวเมนต์จะถูกกำหนดตามลำดับที่ส่งผ่าน อาร์กิวเมนต์สุดท้ายปรากฏในลำดับที่ระบุไว้เนื่องจาก *args แสดงถึงอาร์กิวเมนต์เพิ่มเติมที่ไม่ทราบจำนวน
ตัวอย่างสถานการณ์
มาดูข้อมูลโค้ดที่พบข้อผิดพลาดนี้กัน:
def print_menu(สลัด, พิซซ่า):print("เมนูสลัด") สำหรับ s ในสลัด:print(s) print("") print("Pizza Menu") สำหรับ p ในพิซซ่า:print(p)ก่อน>ฟังก์ชันนี้ยอมรับสองอาร์กิวเมนต์:สลัดและพิซซ่า ฟังก์ชั่นของเราพิมพ์สลัดแต่ละเมนูในเมนูสลัด และพิซซ่าแต่ละชิ้นบนเมนูพิซซ่าไปที่คอนโซล
มาเรียกฟังก์ชันของเรากันดีกว่า:
สลัด =["สลัดทูน่า", "สลัดผักกาดและมะม่วง", "สลัดกรีก"]พิซซ่า =["สลัดผัก", "แฮมกับสับปะรด", "ไก่บาร์บีคิว"]print_menu(พิซซ่า=พิซซ่า, สลัด)รหัสของเราส่งคืน:
ไฟล์ "main.py" บรรทัดที่ 13 print_menu(pizzas=pizzas, salads) ^SyntaxError:อาร์กิวเมนต์ตำแหน่งตามอาร์กิวเมนต์ของคีย์เวิร์ดมีข้อผิดพลาดในรหัสของเราตามที่เราคาดไว้ มาแก้ไขกันเถอะ
การแก้ปัญหา
ในการแก้ปัญหานี้ เราต้องตรวจสอบให้แน่ใจว่าอาร์กิวเมนต์ตำแหน่งทั้งหมดมาก่อนอาร์กิวเมนต์ของคีย์เวิร์ด มาเปลี่ยนวิธีที่เราเรียกใช้ฟังก์ชันเพื่อให้สอดคล้องกับกฎนี้:
print_menu(สลัด พิซซ่า)เราได้ระบุอาร์กิวเมนต์ตำแหน่งสองอย่าง:สลัดและพิซซ่า อีกทางหนึ่ง เราสามารถระบุ “พิซซ่า” เป็นอาร์กิวเมนต์ของคีย์เวิร์ดหลัง “สลัด”:
print_menu(สลัด, พิซซ่า =พิซซ่า)ในตัวอย่างนี้ ไม่จำเป็นต้องเพิ่มอาร์กิวเมนต์ของคีย์เวิร์ดใดๆ เนื่องจากเราไม่ได้ใช้เมธอด *args จากที่กล่าวมา การเพิ่มอาร์กิวเมนต์ของคีย์เวิร์ดจะทำให้โค้ดอ่านง่ายขึ้น ขึ้นอยู่กับจำนวนค่าที่ส่งไปยังฟังก์ชัน
เรียกใช้โค้ดของเราด้วยการเรียกฟังก์ชันที่แก้ไขนี้:
สลัดเมนูสลัดทูน่าสลัดผักกาดและมะม่วงสลัดกรีกสลัดเมนูพิซซ่าVeggie SupremeHam and PineappleBBQ Chickenรหัสของเราพิมพ์รายการ Python สองรายการของเราสำเร็จ
บทสรุป
อาร์กิวเมนต์ตำแหน่งต้องปรากฏก่อนอาร์กิวเมนต์คีย์เวิร์ดใน Python นี่เป็นเพราะ Python ตีความอาร์กิวเมนต์ตำแหน่งตามลำดับที่ปรากฏ จากนั้นจะตีความอาร์กิวเมนต์ของคีย์เวิร์ดที่ระบุไว้
ตอนนี้คุณพร้อมที่จะแก้ไขข้อผิดพลาด "positional argument follow keyword argument" เหมือนผู้เชี่ยวชาญ Python Developer!