ต่อhttps://docs.python.org/3/reference/lexical_analysis.html#integer-literals :
ตัวอักษรจำนวนเต็มอธิบายโดยนิยามศัพท์ต่อไปนี้:
integer ::= decimalinteger | octinteger | hexinteger | bininteger
decimalinteger ::= nonzerodigit digit* | "0"+
nonzerodigit ::= "1"..."9"
digit ::= "0"..."9"
octinteger ::= "0" ("o" | "O") octdigit+
hexinteger ::= "0" ("x" | "X") hexdigit+
bininteger ::= "0" ("b" | "B") bindigit+
octdigit ::= "0"..."7"
hexdigit ::= digit | "a"..."f" | "A"..."F"
bindigit ::= "0" | "1"
ไม่มีขีดจำกัดความยาวของตัวอักษรจำนวนเต็มนอกเหนือจากสิ่งที่สามารถเก็บไว้ในหน่วยความจำที่มีอยู่
โปรดทราบว่าไม่อนุญาตให้นำเลขศูนย์นำหน้าในเลขฐานสิบที่ไม่ใช่ศูนย์ สิ่งนี้มีไว้สำหรับการเปลี่ยนรูปแบบด้วยตัวอักษรฐานแปดสไตล์ C ซึ่ง Python ใช้ก่อนเวอร์ชัน 3.0
ดังที่ระบุไว้ที่นี่ไม่อนุญาตให้นำเลขศูนย์นำหน้าในเลขฐานสิบที่ไม่ใช่ศูนย์ "0"+
ถูกกฎหมายเป็นกรณีพิเศษซึ่งไม่มีอยู่ใน Python 2 :
integer ::= decimalinteger | octinteger | hexinteger | bininteger
decimalinteger ::= nonzerodigit digit* | "0"
octinteger ::= "0" ("o" | "O") octdigit+ | "0" octdigit+
SVN กระทำ r55866ใช้ PEP 3127 ในโทเค็นไนเซอร์ซึ่งห้ามใช้0<octal>
หมายเลขเก่า อย่างไรก็ตามอยากรู้อยากเห็นมันยังเพิ่มบันทึกนี้:
/* in any case, allow '0' as a literal */
ด้วยnonzero
แฟล็กพิเศษที่พ่นSyntaxError
หากลำดับของตัวเลขต่อไปนี้มีตัวเลขที่ไม่ใช่ศูนย์เท่านั้น
นี่เป็นเรื่องแปลกเนื่องจากPEP 3127ไม่อนุญาตในกรณีนี้:
PEP นี้เสนอว่าความสามารถในการระบุเลขฐานแปดโดยใช้ศูนย์นำหน้าจะถูกลบออกจากภาษาใน Python 3.0 (และโหมดแสดงตัวอย่าง Python 3.0 ที่ 2.6) และSyntaxError จะเพิ่มขึ้นเมื่อใดก็ตามที่ "0" นำหน้าคือ ตามด้วยตัวเลขอื่นทันที
(เน้นเหมือง)
ดังนั้นความจริงที่ว่ามีการอนุญาตให้ใช้เลขศูนย์หลายตัวจึงเป็นการละเมิด PEP ในทางเทคนิคและโดยพื้นฐานแล้ว Georg Brandl จะนำมาใช้เป็นกรณีพิเศษ เขาได้ทำการเปลี่ยนแปลงเอกสารที่เกี่ยวข้องเพื่อทราบว่า"0"+
เป็นกรณีที่ถูกต้องสำหรับdecimalinteger
(ก่อนหน้านี้ได้รับการคุ้มครองภายใต้octinteger
)
เราคงไม่มีทางรู้แน่ชัดว่าเหตุใด Georg จึงเลือกที่จะทำให้"0"+
ถูกต้อง - มันอาจยังคงเป็นกรณีมุมแปลก ๆ ใน Python ตลอดไป
อัปเดต [28 ก.ค. 2558]: คำถามนี้นำไปสู่กระทู้สนทนาที่มีชีวิตชีวาเกี่ยวกับแนวคิดเกี่ยวกับงูหลามที่Georg พูดใน :
Steven D'Aprano เขียนว่า:
ทำไมถึงถูกกำหนดแบบนั้น? [... ] ทำไมเราต้องเขียน 0000 เพื่อให้ได้ศูนย์?
ฉันบอกคุณได้ แต่ฉันต้องฆ่าคุณ
เฟรด
ต่อมาเธรดได้สร้างรายงานข้อบกพร่องนี้โดยมีจุดประสงค์เพื่อกำจัดกรณีพิเศษนี้ ที่นี่เฟรดพูดว่า :
ฉันจำสาเหตุของการเปลี่ยนแปลงโดยเจตนานี้ไม่ได้ (ดังที่เห็นจากการเปลี่ยนแปลงเอกสาร)
ฉันไม่สามารถหาเหตุผลที่ดีสำหรับการเปลี่ยนแปลงนี้ได้ในขณะนี้ [... ]
และด้วยเหตุนี้เราจึงมี: เหตุผลที่ชัดเจนเบื้องหลังความไม่ลงรอยกันนี้จะสูญหายไปตามกาลเวลา
ในที่สุดโปรดทราบว่ารายงานข้อผิดพลาดถูกปฏิเสธ: ศูนย์นำหน้าจะยังคงได้รับการยอมรับเฉพาะในจำนวนเต็มศูนย์สำหรับ Python 3.x ที่เหลือ