O Python 2.x sempre retorna uma string para instruções de impressão?
Eu estava brincando com o Python 3.8 e 2.7 e descobri que a função de impressão no Python 3 não permite zeros à esquerda na impressão. Ver abaixo:
>>> 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
Suponho que isso aconteça porque o Python 3.x diferencia os tipos de dados mesmo durante a impressão, por isso funciona o seguinte:
>>> print('01')
01
Pedi explicitamente para imprimir uma string. Embora no Python 2.7 não haja erro com a seguinte instrução:
>>> print '01'
01
Ele apenas retorna o que eu perguntei. Isso significa que o Python 2.x sempre converte valores de impressão em strings?
Respostas
No python 2 original, printé uma declaração e não tem returnvalor algum.
>>> x=print 'hi'
File "<stdin>", line 1
x=print 'hi'
^
SyntaxError: invalid syntax
Se você usar a função de impressão compatível com o futuro no python 2.7, digamos, ela se comportará exatamente como o Python 3.
No Python 3,, printuma função, sempre retorna None. Ele imprime em um arquivo (geralmente a saída padrão), mas o valor retornado da função é None.
>>> x=print(1)
1
>>> x
>>> type(x)
<type 'NoneType'>
Quanto a 1vs 01, em Python 2, um número com um zero à esquerda é octal:
>>> 010
8
Essa sintaxe é ilegal no Python 3, então você consegue SyntaxError: invalid token. Isso acontece antes que a printinstrução veja o que está acontecendo, então não tem nada a ver com print.
Se você deseja escrever um número em octal em Python3 , a sintaxe correta é a seguinte 0o...:
>>> 0o10
8