Başına https://docs.python.org/3/reference/lexical_analysis.html#integer-literals :
Tamsayı değişmezleri aşağıdaki sözcük tanımlarıyla açıklanır:
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"
Mevcut bellekte saklanabilecekler dışında tamsayı değişmezlerinin uzunluğu için bir sınır yoktur.
Sıfır olmayan bir ondalık sayıdaki baştaki sıfırlara izin verilmediğini unutmayın. Bu, Python'un 3.0 sürümünden önce kullandığı C tarzı sekizlik değişmez değerlerle belirsizliği ortadan kaldırmak içindir.
Burada belirtildiği gibi, sıfır olmayan ondalık sayıdaki baştaki sıfırlara izin verilmez. Python 2'de olmayan"0"+
çok özel bir durum olarak yasaldır :
integer ::= decimalinteger | octinteger | hexinteger | bininteger
decimalinteger ::= nonzerodigit digit* | "0"
octinteger ::= "0" ("o" | "O") octdigit+ | "0" octdigit+
SVN commit r55866 , eski 0<octal>
sayıları yasaklayan belirteçte PEP 3127'yi uyguladı . Ancak ilginç bir şekilde şu notu da ekler:
/* in any case, allow '0' as a literal */
nonzero
Yalnızca SyntaxError
aşağıdaki basamak dizisi sıfır olmayan bir rakam içeriyorsa a atan özel bir bayrak ile .
Bu garip çünkü PEP 3127 bu duruma izin vermiyor:
Bu PEP, başında sıfır kullanarak sekizlik bir sayı belirleme yeteneğinin Python 3.0'daki (ve 2.6'nın Python 3.0 önizleme modu) dilden kaldırılacağını ve baştaki "0" olduğunda bir SyntaxError oluşturulacağını önermektedir. hemen ardından başka bir rakam .
(vurgu benim)
Dolayısıyla, birden fazla sıfıra izin verilmesi, teknik olarak KEP'i ihlal ediyor ve temelde Georg Brandl tarafından özel bir durum olarak uygulandı. "0"+
Geçerli bir vaka olduğunu belirtmek için ilgili dokümantasyon değişikliğini yaptı decimalinteger
(daha önce kapsamında kapsanan octinteger
).
Muhtemelen asla bilemeyeceğim tam Georg yapmak seçtim "0"+
geçerli - sonsuza kadar Python garip bir köşe durumda kalabilir.
GÜNCELLEME [28 Temmuz 2015]: Bu soru, Georg'un dahil olduğu python fikirleri üzerine canlı bir tartışma başlığına yol açtı :
Steven D'Aprano şunu yazdı:
Neden bu şekilde tanımlandı? [...] Sıfır elde etmek için neden 0000 yazalım?
Sana söyleyebilirdim ama sonra seni öldürmek zorunda kalırım.
Georg
Daha sonra iş parçacığı , bu özel durumdan kurtulmayı amaçlayan bu hata raporunu ortaya çıkardı . Burada, Georg diyor :
Bu kasıtlı değişikliğin nedenini hatırlamıyorum (doküman değişikliğinden görüldüğü gibi).
Şu anda bu değişiklik için iyi bir neden bulamıyorum [...]
ve böylece bizde var: bu tutarsızlığın arkasındaki kesin sebep zamanla kayboldu.
Son olarak, hata raporunun reddedildiğine dikkat edin: Baştaki sıfırlar, Python 3.x'in geri kalanı için yalnızca sıfır tamsayılarda kabul edilmeye devam edecek.