Waarom verbreekt het gebruik van print_function van __future__ import print_function in Python2-stijl?

Ik ben nieuw in het programmeren met python en ik probeer af te drukken met een scheidingsteken en einde, maar ik krijg nog steeds een syntaxisfout.

Ik gebruik python 2.7.

Hier is mijn code:

from __future__ import print_function
import sys, os, time
for x in range(0,10):
    print x, sep=' ', end=''
    time.sleep(1)

En hier is de fout:

$ python2 xy.py
  File "xy.py", line 5
    print x, sep=' ', end=''
          ^
SyntaxError: invalid syntax
$

Antwoord 1, autoriteit 100%

Allereerst moet from __future__ import print_functionde eerste regel code in je script zijn (afgezien van enkele hieronder genoemde uitzonderingen). Ten tweede, zoals andere antwoorden al hebben gezegd, moet je nu printals functie gebruiken. Dat is het hele punt van from __future__ import print_function; om de printfunctievan Python 3 naar Python 2.6+ te brengen.

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__-statements moeten bovenaan het bestand staan, omdat ze fundamentele dingen over de taal veranderen, en dus moet de compiler er vanaf het begin van op de hoogte zijn. Uit de documentatie:

Een toekomstige verklaring wordt speciaal bij compileren herkend en behandeld
tijd: Veranderingen in de semantiek van kernconstructies zijn vaak
geïmplementeerd door verschillende code te genereren. Het kan zelfs zo zijn dat
een nieuwe functie introduceert een nieuwe incompatibele syntaxis (zoals een nieuwe
gereserveerd woord), in welk geval de compiler mogelijk de . moet ontleden
module anders. Dergelijke beslissingen kunnen pas tijdens runtime worden uitgesteld.

De documentatie vermeldt ook dat de enige dingen die vooraf kunnen gaan aan een __future__-instructie de module docstring, opmerkingen, lege regels en andere toekomstige instructies zijn.

Other episodes