2012-08-28 20 views
37

Bir ifade ile ifade arasındaki farkı anlarım ve Python3'ün yazdırmayı() işlevine dönüştürdüğünü anlıyorum. Bununla birlikte, çeşitli Python2.x yorumlayıcılarında parantez ile çevrili bir print() deyimini çalıştırdım ve sorunsuz çalıştı, herhangi bir modülü almam bile gerekmedi.Yazdır() (işlev sürümü) Python2.x içinde

Soruma Aşağıdaki kod print("Hello SO!") Python2.x içinde bir ifade veya ifade olarak değerlendirildi mi?

cevap

38

aşağıdaki ifadeleri düşünün:

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

Onlar eşdeğerdir. Aynı şekilde,

da bir eşdeğerdir. Size baskı fonksiyonunu değiştirirseniz o

Uyarı:

print("Hello","SO!") 

Sen (...,...) baskı beri bir tuplea olarak interpteted edilir, piton 2 ile piton 2 ve piton 3. arasındaki bir fark edeceksiniz bir ifadedir python 3'te ise, çoklu argümanlar içeren bir işlev çağrısıdır. Bu nedenle

, el altında soruyu cevaplamak için, print piton 2.x bir ifadesi olarak değerlendirilir sürece from __future__ import print_function açıklamada print ("Hello SO!"), argüman olarak değerlendirilir

+0

'a ihtiyacınız var. – delnan

+0

Python3'te __future__ import print_function zedeleniyor mu kullanıyorsunuz? Bir içe aktarma hatası vermiyor. – sgoblin

+1

@sgoblin - Hayır. __future__' modülü, hiçbir şeyden hiçbir zaman kaldırılmayacağını garanti eder. Python3.x üzerinde etkin bir no-op var. – mgilson

2

Yine de bir deyim olarak değerlendiriliyorsunuz, sadece "Hello SO!" değerini değerlendiren ("Hello SO!") yazıyorsunuz, çünkü bu bir tuple değil (delnan tarafından belirtildiği gibi).

+3

Ve net olmak gerekirse, '("Merhaba SO!")' 'Ile tamamen aynıdır' - bir tanımlama grubu değil "Merhaba SO!". – delnan

+0

Teşekkürler @delnan, Yorumunuzu 1 elemanlı tuple hakkında güzel bir cevap göndermeden önce gördüm. –

+2

Ve delnan'ın yorumunu genişletmek için, 1-tuple oluşturmak için, “__future__ import print_function” 'dan ya da aradığı şeyden farklı olarak, bir virgül (örn. '(" Hello SO! ",)') – mgilson

12

print("Hello SO!") (python 2.6 tanıtılan) print ifadesi ("Hello SO!") ifadesidir.

Birden fazla değer yazdırıyorsanız, bu fark yaratabilir; örneğin print("Hello", "world"), "Hello" ve "world" iki dizisi yerine 2 öğeli tuple ('Hello', 'world') yazdıracaktır. Python 3 kullanım from __future__ import print_function ile uyumluluk için

:

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

Eğer python2.5 ve python3.x ile uyumlu olmak istiyorsanız string interpolasyonunu kullanabilirsiniz (bu günlerde çok fazla insanın olduğunu savunmama rağmen ...) – mgilson

+4

Bu da oldukça ilginç. Bunu bir komut dosyasına koyarsanız, dosyanın başında "__future__" içe aktarımların olması gerektiğine, ancak bazı derin python sihrine bağlı olarak etkileşimli yorumlayıcıda çalışacağını unutmayın. – mgilson