python3 print_function from __future__ python import

python - print_function - from__future__ import division



¿Por qué invocamos la impresión después de importar print_function(en Python 2.6)? (5)

Para obtener la función de impresión 3.0 hacemos lo siguiente en Python 2.6:

from __future__ import print_function

Pero para usar la función invocamos print () not print_function (). ¿Es solo una inconsistencia o hay una buena razón para esto?

¿Por qué no lo siguiente?

from __future__ import print


En Python 3, la palabra clave print ha cambiado de llamar a una declaración a llamar a una función.

Entonces, en lugar de decir el print value , ahora necesita decir print(value) , o obtendrá un SyntaxError .

Al hacer la import , este cambio se efectúa también en Python 2, por lo que puede escribir programas usando la misma sintaxis que Python 3 (al menos en lo que respecta a la print ).


La razón es que cuando importas de __future__ realidad estás configurando un indicador que le dice al intérprete que se comporte de una manera diferente a la habitual: en el caso de print_function , la función print() está disponible en lugar de la declaración. El módulo __future__ es así "especial" o "mágico" - no funciona como los módulos habituales.


print_function es un FeatureName no se debe confundir con la función integrada de print . Es una función disponible desde el futuro para que pueda usar la función incorporada que puede proporcionar.

Otras características incluyen:

all_feature_names = [ "nested_scopes", "generators", "division", "absolute_import", "with_statement", "print_function", "unicode_literals", ]

Existen razones específicas por las cuales, al migrar su código a la siguiente versión superior, su programa permanecerá como tal, utilizando la función actualizada en lugar de la versión __future__ . Además, si fuera el nombre de la función o la palabra clave en sí misma, puede causar confusión al analizador.


Sencillo. imprimir es una palabra clave en Python 2.

Entonces una declaración como

from somewhere import print

sería un SyntaxError automático en Python 2.

Permitir (codificarlo en la sintaxis)

from __future__ import print

se consideró que no valía la pena el esfuerzo.


Ejemplo mínimo

>>> print # Statement. >>> from __future__ import print_function >>> print # Function object. <built-in function print> >>> print() # Function call. >>>

Como se mencionó en: ¿Qué es __future__ en Python utilizado y cómo / cuándo usarlo, y cómo funciona from __future__ Son declaraciones mágicas que alteran la forma en que Python analiza el código.

from __future__ import print_function en particular, los cambios se print desde una declaración a una función incorporada, como se muestra en el shell interactivo anterior.

Por qué print(1) funciona sin from __future__ import print_function en Python 2

Porque el:

print(1)

se analiza como:

print (1) ^^^^^ ^^^ 1 2

  1. declaración de print
  2. argumento

en lugar de:

print( 1 ) ^^^^^^ ^ ^ 1 2 1

  1. print()
  2. argumento

Y:

assert 1 == (1)

como se menciona en: regla de sintaxis de coma de tupla final de Python