2012-08-28 15 views
37

Rozumiem różnicę między instrukcją a wyrażeniem i rozumiem, że Python3 przekształcił print() w funkcję.Używanie print() (wersja funkcji) w Python2.x

Jednak uruchomiłem polecenie print() otoczone nawiasami na różnych interpreterach Python2.x i działało bezbłędnie, nie musiałem nawet importować żadnego modułu.

Moje pytanie: Czy poniższy kod print("Hello SO!") został oceniony jako instrukcja lub wyrażenie w Python2.x?

Odpowiedz

38

Rozważmy następujące wyrażenia:

a = ("Hello SO!") 
a = "Hello SO!" 

Są one równoważne. W ten sam sposób, z oświadczeniem:

statement_keyword("foo") 
statement_keyword "foo" 

są również równoważne.

Zauważ, że jeśli zmienisz funkcję drukowania do:

print("Hello","SO!") 

Zauważysz różnicę między Python 2 i Python 3. Z python 2, (...,...) jest interpteted jak krotki od druku jest oświadczenie podczas gdy w Pythonie 3 jest to wywołanie funkcji z wieloma argumentami.

Dlatego, aby odpowiedzieć na pytanie pod ręką, print oceniana jest jako oświadczenie w Pythonie 2.x chyba from __future__ import print_function (wprowadzone w Pythonie 2.6)

+0

... chyba że zrobiłeś 'from __future__ import print_function' lub jakkolwiek to się nazywa. – delnan

+0

Używanie od __future__ import print_function boli w Python3? Nie daje błędu importu. – sgoblin

+1

@sgoblin - Nie. moduł '__future__' gwarantuje, że nic nie zostanie z niego usunięte. Jest efektywnie no-op na python3.x – mgilson

2

Jest jeszcze oceniany jako oświadczenie, jesteś po prostu drukowania ("Hello SO!"), który po prostu ocenia się "Hello SO!" ponieważ nie jest krotka (jak wspomniano przez delnan).

+3

I żeby było jasne, '("Hello SO!")' Jest dokładnie równoważne '' - nie jest to krotka "Witaj so!". – delnan

+0

Dzięki @delnan, zobaczyłem twój komentarz tuż przed opublikowaniem ładnej odpowiedzi na temat 1-elementowych krotek. –

+2

I aby rozwinąć komentarz delnana, aby utworzyć 1-krotność, potrzebujesz przecinka (np. '(" Hello SO! "))') – mgilson

12

print("Hello SO!") oceniana jest jako oświadczenie print ("Hello SO!"), gdzie argument print to wyrażenie ("Hello SO!").

Może to mieć znaczenie, jeśli drukujesz więcej niż jedną wartość; na przykład print("Hello", "world") wydrukuje 2-elementową krotkę ('Hello', 'world') zamiast dwóch ciągów "Hello" i "world".

Dla zgodności z Python 3 Użyj from __future__ import print_function:

>>> print("Hello", "world") 
('Hello', 'world') 
>>> from __future__ import print_function 
>>> print("Hello", "world") 
Hello world 
+0

Jeśli chcesz być kompatybilny z python2.5 i python3.x możesz użyć interpolacji ciągów (chociaż nie sądzę, że zbyt wielu ludzi zaleca, że ​​te dni ...) – mgilson

+4

Jest to również całkiem interesujące. Zauważ, że jeśli umieścisz to w skrypcie, to się nie powiedzie, ponieważ import "__future__" musi wystąpić na początku pliku, ale dzięki jakiejś głębokiej magii python działa w interaktywnym tłumaczu. – mgilson

Powiązane problemy