Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

อาร์กิวเมนต์ตำแหน่ง Python ตามอาร์กิวเมนต์ของคีย์เวิร์ด Solution

ใน 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!