O Python 2.x sempre retorna uma string para instruções de impressão?

Nov 16 2020

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

5 kojiro Nov 16 2020 at 20:52

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