Por que o uso da importação de __future__função de impressão interrompe a impressão no estilo Python2? [fechadas]

135

Eu sou novo em programação com python e estou tentando imprimir com um separador e final, mas ele ainda está me dando um erro de sintaxe.

Estou usando o python 2.7.

Aqui está o meu código:

from __future__ import print_function
import sys, os, time

for x in range(0,10):
    print x, sep=' ', end=''
    time.sleep(1)

E aqui está o erro:

$ python2 xy.py
  File "xy.py", line 5
    print x, sep=' ', end=''
          ^
SyntaxError: invalid syntax
$
UHMIS
fonte
4
Você importou a impressão como uma função, mas ainda a está tratando como uma declaração .
precisa saber é o seguinte
4
você não pode chamar de impressão sem o parêntese, porque você mudou de impressão para ser uma função print (args)
Charlie Parker

Respostas:

210

Antes de tudo, from __future__ import print_functionprecisa ser a primeira linha de código no seu script (além de algumas exceções mencionadas abaixo). Segundo, como outras respostas disseram, você deve usar printcomo uma função agora. Esse é o ponto principal de from __future__ import print_function; para trazer a print função do Python 3 para o Python 2.6+.

from __future__ import print_function

import sys, os, time

for x in range(0,10):
    print(x, sep=' ', end='')  # No need for sep here, but okay :)
    time.sleep(1)

__future__As instruções precisam estar próximas à parte superior do arquivo, pois alteram coisas fundamentais sobre o idioma e, portanto, o compilador precisa conhecê-las desde o início. A partir da documentação :

Uma declaração futura é reconhecida e tratada especialmente em tempo de compilação: As alterações na semântica das construções principais geralmente são implementadas gerando código diferente. Pode até ser que um novo recurso introduza uma nova sintaxe incompatível (como uma nova palavra reservada); nesse caso, o compilador pode precisar analisar o módulo de maneira diferente. Tais decisões não podem ser adiadas até o tempo de execução.

A documentação também menciona que as únicas coisas que podem preceder uma __future__declaração são as instruções do módulo, comentários, linhas em branco e outras declarações futuras.

Cifase
fonte
1
First of all, from __future__ import print_function needs to be the first line of code in your script , Posso saber porquê?
Avinash Raj
1
@UHMIS, faça end=' '.
Cyphase
14
Conforme declarado pela documentação ( docs.python.org/2/reference/simple_stmts.html#future ), ela não deve ser a primeira linha: A future statement must appear near the top of the module. The only lines that can appear before a future statement are: the module docstring (if any), comments, blank lines, and other future statements.
ngulam
1
@ngulam, eu editei para mencionar isso, mas não ficou claro no primeiro parágrafo, então eu o corrigi. Obrigado por apontar isso.
Cyphase
1
@AvinashRaj, eu não sei; você teria que perguntar ao UHMIS. Mas, como eu disse em um comentário à sua resposta, talvez o OP tenha feito uma alteração e não tenha mencionado. E o primeiro comentário da OP foi que ainda havia um erro.
Cyphase