Neden __future__ 'dan kullanmak import print_function Python2 tarzı baskıyı bozar? [kapalı]


135

Python ile programlamada yeniyim ve bir ayırıcı ile çıktı almaya ve sonlandırmaya çalışıyorum ama yine de bana bir sözdizimi hatası veriyor.

Python 2.7 kullanıyorum.

İşte kodum:

from __future__ import print_function
import sys, os, time

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

Ve işte hata:

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

4
Print'i bir işlev olarak içe aktardınız ama yine de onu bir ifade olarak ele alıyorsunuz .
jonrsharpe

4
parantez olmadan yazdır çağrısı yapamazsınız çünkü yazdırmayı işlev olarak değiştirdiniz print (args)
Charlie Parker

Yanıtlar:


210

Her şeyden önce, from __future__ import print_functionkomut dosyanızdaki ilk kod satırı olması gerekir (aşağıda belirtilen bazı istisnalar dışında). İkincisi, diğer yanıtların da söylediği gibi, printşimdi bir işlev olarak kullanmalısınız . Bütün mesele bu from __future__ import print_function; print işlevi Python 3'ten Python 2.6 + ' ya getirmek için .

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__ifadelerin dosyanın en üstüne yakın olması gerekir çünkü bunlar dille ilgili temel şeyleri değiştirirler ve bu nedenle derleyicinin bunları baştan bilmesi gerekir. Gönderen belgeler :

Gelecekteki bir ifade, derleme sırasında özel olarak tanınır ve işlenir: Çekirdek yapıların anlambilimindeki değişiklikler genellikle farklı kodlar oluşturularak uygulanır. Hatta yeni bir özelliğin yeni uyumsuz sözdizimi (yeni ayrılmış bir sözcük gibi) sunması da söz konusu olabilir, bu durumda derleyicinin modülü farklı şekilde ayrıştırması gerekebilir. Bu tür kararlar çalışma zamanına kadar ertelenemez.

Dokümantasyon ayrıca bir __future__ifadeden önce gelebilecek tek şeyin dokümanlar , yorumlar, boş satırlar ve diğer gelecek ifadeler olduğundan bahsedilir.


1
First of all, from __future__ import print_function needs to be the first line of code in your script , Nedenini öğrenebilir miyim?
Avinash'ın Raj

1
@UHMIS, yap end=' '.
Cyphase

14
Belgeler (tarafından belirtildiği gibi docs.python.org/2/reference/simple_stmts.html#future ) sahip olduğu değil olması ilk : satır 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, bundan bahsetmek için düzenleme yaptım, ancak ilk paragrafta net değildi, bu yüzden onu düzelttim. Gösterdiğiniz için teşekkürler.
Cyphase

1
@AvinashRaj, bilmiyorum; UHMIS'e sormanız gerekir. Ama cevabınıza bir yorumda da söylediğim gibi, belki OP bir değişiklik yaptı ve bundan bahsetmedi. Ve OP'ın ilk açıklama oldu hala bir hata olduğunu.
Cyphase
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.