ใน Python 3 ฟังก์ชัน xrange ถูกลบ หากคุณพยายามใช้ฟังก์ชัน xrange ในโปรแกรม Python 3 คุณจะพบ NameError: name ‘xrange’ is not defined
ข้อผิดพลาด.
ในคู่มือนี้ เราจะพูดถึงความหมายของข้อผิดพลาดนี้และสาเหตุที่คุณอาจพบข้อผิดพลาดนี้ เราจะพูดถึงตัวอย่างข้อผิดพลาดนี้เพื่อให้คุณได้เรียนรู้วิธีแก้ไขในโค้ด
NameError:ไม่ได้กำหนดชื่อ 'xrange'
ใน Python 2 ฟังก์ชัน xrange ช่วยให้คุณสร้างช่วงของตัวเลขได้ พิจารณาข้อมูลโค้ดต่อไปนี้:
print(xrange(0, 3))
รหัสของเราส่งคืน [0, 1, 2] ซึ่งเป็นตัวเลขทั้งหมดในช่วง 0 และ 3 (ไม่รวม 3) xrange()
ฟังก์ชั่นส่งคืนรายการตัวเลข
Python 3 ลบ xrange()
ทำหน้าที่แทนฟังก์ชันใหม่ที่เรียกว่า range() range()
ฟังก์ชัน เช่น xrange()
, สร้างช่วงของตัวเลข
xrange()
. มีความแตกต่างสองประการ และ range()
;
xrange()
และrange()
มีชื่อเรียกต่างกัน- The
xrange()
ฟังก์ชั่นสร้างรายการตัวเลขrange()
ฟังก์ชั่นสร้างวัตถุ
เนื่องจาก range()
ฟังก์ชันสร้างวัตถุ คุณต้องแปลงเป็นรายการหากต้องการดูรายการตัวเลข มิฉะนั้น ทั้งสองวิธีนี้จะทำงานในลักษณะเดียวกัน
ตัวอย่างสถานการณ์
เราจะเขียนโปรแกรมที่แสดงผู้เล่นสองสามคนแรกที่อยู่ด้านบนสุดของกระดานผู้นำเกมไพ่ ในการเริ่มต้น มาประกาศลีดเดอร์บอร์ดของเราเป็นรายการ:
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
leaderboard = ["Alex", "Jonas", "Emma", "Kate"]
ต่อไป เราจะถามผู้ใช้ว่าพวกเขาต้องการดูคะแนนกี่คะแนน:
to_view = int(input("How many scores would you like to view? "))
เราแปลงค่าที่ผู้ใช้ใส่เป็นจำนวนเต็ม นี่เป็นเพราะว่า xrange()
ฟังก์ชันรองรับเฉพาะจำนวนเต็มเท่านั้น
ต่อไป มาทำซ้ำในรายการลีดเดอร์บอร์ดของเราโดยใช้ for loop เราจะแสดงเฉพาะจำนวนผลลัพธ์ที่ผู้ใช้ร้องขอให้ดูบนคอนโซล:
for l in xrange(0, to_view): print(l + 1, leaderboard[l])
เราใช้ xrange()
ฟังก์ชันเพื่อสร้างช่วงของตัวเลขระหว่าง 0 ถึงจำนวนที่ผู้ใช้ใส่ ใน for loop ของเรา เราใช้ print()
คำสั่งพิมพ์รายการกระดานผู้นำที่สัมพันธ์กับตัวเลขใน xrange()
รายการที่วงของเรากำลังดูอยู่
เราพิมพ์ค่าของ “l” บวกหนึ่งข้างชื่อผู้เล่น ทำให้เราเห็นตำแหน่งของพวกเขา เนื่องจากรายการถูกสร้างดัชนีจากศูนย์ เราจึงเพิ่มรายการหนึ่งไปที่ “l” ซึ่งจะป้องกันไม่ให้ผู้เล่นคนแรกในรายชื่อของเราอยู่ที่ตำแหน่ง "0" เป็นต้น
เรียกใช้รหัสของเราและดูว่าเกิดอะไรขึ้น:
How many scores would you like to view? 2 Traceback (most recent call last): File "main.py", line 5, in <module> for l in xrange(0, to_view): NameError: name 'xrange' is not defined
โปรแกรมของเราส่งคืนข้อผิดพลาด
การแก้ปัญหา
เราใช้ xrange()
ฟังก์ชันสร้างช่วงของตัวเลข ใน Python 2 สิ่งนี้จะถูกต้อง เรากำลังใช้ Python 3 เพื่อรันโปรแกรม ซึ่งหมายความว่าเราไม่สามารถอ้างอิง xrange()
การทำงาน.
เพื่อแก้ไขข้อผิดพลาด เราต้องแทนที่ xrange()
ด้วย range()
กระบวนการ:
for l in range(0, to_view): print(l + 1, leaderboard[l])
สำหรับกรณีการใช้งานนี้ ทั้ง xrange()
และ range()
ก็จะได้ผลลัพธ์เหมือนเดิม เรียกใช้โค้ดของเราเพื่อดูว่าใช้งานได้หรือไม่:
How many scores would you like to view? 2 1 Alex 2 Jonas
โปรแกรมของเราแสดงชื่อผู้เล่นในการแข่งขันที่ปรากฏในสองตำแหน่งแรกบนกระดานผู้นำได้สำเร็จ
กำหนดวิธีการ xrange() ใหม่
วิธีแก้ปัญหาที่เป็นไปได้สำหรับปัญหานี้คือการกำหนดตัวแปรที่เรียกว่า xrange ที่จุดเริ่มต้นของโปรแกรมของคุณซึ่งเท่ากับ range()
การทำงาน:
xrange = range
นี่ไม่ใช่วิธีแก้ปัญหาที่ดีสำหรับข้อผิดพลาดนี้ เนื่องจากคุณเพียงหลีกเลี่ยงปัญหาในการเปลี่ยนชื่อวิธีการที่มีอยู่ อาจทำให้บางคนสับสนในการอ่านโค้ดเบส Python 3 และดู xrange()
คำสั่งแม้ว่าคุณจะกำหนด xrange เป็นตัวแปรก็ตาม
ทางออกที่ดีที่สุดคือการเปลี่ยนชื่อ xrange()
. ของคุณ คำสั่งไปยัง range()
และเพื่อทำการเปลี่ยนแปลงที่จำเป็นเพื่อให้แน่ใจว่า codebase ของคุณทำงานใน Python 3
บทสรุป
ข้อผิดพลาด "NameError:ชื่อ 'xrange' ไม่ได้ถูกกำหนด" ขึ้นเมื่อคุณพยายามใช้ xrange()
วิธีสร้างช่วงของตัวเลขใน Python 3 เพื่อแก้ไขข้อผิดพลาดนี้ ให้อัปเดตรหัสของคุณเพื่อใช้ range()
วิธีการที่มาพร้อมกับ Python 3
range()
เป็นการแทนที่ Python 3 สำหรับ xrange()
. ตอนนี้คุณมีความรู้ที่จำเป็นในการแก้ไขข้อผิดพลาดนี้อย่างมืออาชีพแล้ว!