Всегда ли Python 2.x возвращает строку для операторов печати?
Я возился с Python 3.8 и 2.7 и обнаружил, что функция печати в Python 3 не позволяет печатать ведущие нули. Смотри ниже:
>>> print(01)
File "<stdin>", line 1
print(01)
^
SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers
Я полагаю, это происходит потому, что Python 3.x различает типы данных даже при печати, поэтому работает следующее:
>>> print('01')
01
Я явно попросил напечатать строку. Хотя в Python 2.7 нет ошибки со следующим утверждением:
>>> print '01'
01
Он просто возвращает то, что я просил. Означает ли это, что Python 2.x всегда преобразует значения печати в строки?
Ответы
В исходном Python 2 printэто утверждение, а не returnзначение.
>>> x=print 'hi'
File "<stdin>", line 1
x=print 'hi'
^
SyntaxError: invalid syntax
Если вы используете совместимую с будущим функцию печати в Python 2.7, скажем, она ведет себя точно так же, как Python 3.
В Python 3 printфункция всегда возвращает None. Он печатает в файл (часто стандартный вывод), но значение, возвращаемое функцией, будет None.
>>> x=print(1)
1
>>> x
>>> type(x)
<type 'NoneType'>
Что касается 1vs 01, в Python 2 число с ведущим нулем является восьмеричным:
>>> 010
8
Этот синтаксис недопустим в Python 3, поэтому вы получите SyntaxError: invalid token. Это происходит до того, как printоператор увидит, что происходит, поэтому он не имеет никакого отношения к этому print.
Если вы хотите записать число в восьмеричном формате в Python3 , правильный синтаксис выглядит 0o...следующим образом:
>>> 0o10
8