Ответ 1
Если вы посмотрите на Lexical Analysis (Целевая строка):
integer ::= decinteger | bininteger | octinteger | hexinteger decinteger ::= nonzerodigit (["_"] digit)* | "0"+(["_"] "0")* ...
Итак, это означает, что a decinteger
либо начинается с ненулевой цифры (за которой следуют все возможные цифры и, возможно, подчеркивания), либо является последовательностью нулей с необязательным подчеркиванием (которое сопоставляется нулю).
Кроме того, в документации указано, что:
Обратите внимание, что ведущие нули в отличном от нуля десятичном числе имеют не.
Итак, это означает, что они делают исключение для нуля (во всей документации для python-3.3 можно найти там): вы можете записать нуль как последовательность нулей. Я предполагаю, что, конечно, они должны включать "0"
(как иначе вы бы указали нуль как decinteger
?), Поэтому почему бы не разрешить больше нулей в этом случае, независимо от числовой системы, 000
есть и остается нуль. Вероятно, они не хотят разрешать 01
как decinteger
для предотвращения случайного запуска python-2.x и таким образом получить совершенно разные результаты.
Наконец, обратите внимание, что подчеркивания являются лишь частью этой спецификации, поскольку python-3.6: в спецификации для 3.5 они не упоминаются в грамматике.
В python-2.7 документация определяет нуль, за которым следуют другие цифры (также другие нули как octinteger
:
integer ::= decimalinteger | octinteger | hexinteger | bininteger decimalinteger ::= nonzerodigit digit* | "0" octinteger ::= "0" ("o" | "O") octdigit+ | "0" octdigit+