¿Python 2.x siempre devuelve una cadena para las declaraciones de impresión?

Nov 16 2020

Estaba jugando con Python 3.8 y 2.7 y descubrí que la función de impresión en Python 3 no permite ceros a la izquierda en la impresión. Vea abajo:

    >>> 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

Supongo que esto sucede porque Python 3.x diferencia los tipos de datos incluso al imprimir, por eso funciona lo siguiente:

>>> print('01')
01

Pedí explícitamente imprimir una cadena. Aunque en Python 2.7 no hay ningún error con la siguiente declaración:

>>> print '01'
01

Simplemente devuelve lo que pedí. ¿Significa que Python 2.x siempre convierte los valores de impresión en cadenas?

Respuestas

5 kojiro Nov 16 2020 at 20:52

En python 2 original, printes una declaración y no tiene returnningún valor.

>>> x=print 'hi'
  File "<stdin>", line 1
    x=print 'hi'
          ^
SyntaxError: invalid syntax

Si usa la función de impresión compatible con el futuro en Python 2.7, digamos, se comporta exactamente como Python 3.

En Python 3, printuna función siempre devuelve None. Imprime en un archivo (a menudo la salida estándar), pero el valor devuelto por la función es None.

>>> x=print(1)
1
>>> x
>>> type(x)
<type 'NoneType'>

En cuanto a 1vs 01, en Python 2, un número con un cero inicial es octal:

>>> 010
8

Esta sintaxis es ilegal en Python 3, por lo que obtiene SyntaxError: invalid token. Esto sucede antes de que la printdeclaración vea lo que está sucediendo, por lo que no tiene nada que ver print.

Si desea escribir un número en octal en Python3 , la sintaxis correcta es la 0o...siguiente:

>>> 0o10
8