2012-08-03 70 views
9

在Python中,一切都是一個對象,你可以輕鬆地傳遞它。是在Python中打印一個函數?

所以我可以做:

>> def b(): 
    ....print "b" 
>> a = b 
>> a() 
    b 

但如果我這樣做

a = print 

我得到SyntaxError。爲什麼這樣 ?

回答

20

在Python 2.x的需要呼叫它,打印是一個語句的功能。在2.6+中,您可以使用from __future__ import print_function使其成爲給定模塊中的一項功能。在Python 3.x中,它是一個可以傳遞的函數。

+4

對於'__future__' +1。 – mgilson 2012-08-03 16:24:53

+4

未來的說法很明確。它不會破壞任何代碼,因爲它隻影響在同一個模塊中的代碼 – jfs 2012-08-03 17:24:36

+0

@JFSebastian - 謝謝 - 我總是把它與「在交互式解釋器提示符下鍵入的未來聲明在其他聲明中生效口譯員會話「。 – 2012-08-03 17:31:07

3

print在3.x之前的python中不是函數。它甚至沒有像一個,你不(params)

6

在python2中,print是一個聲明。如果你做from __future__ import print_function,你可以像你所描述的那樣做。在python3中,你試過的東西沒有任何導入,因爲print是一個函數。

這是覆蓋在PEP3105

4

其他的答案是正確的。 print是一個語句,而不是python2.x中的函數。你有什麼將在python3上工作。我唯一需要補充的是,如果你想要一些能在python2和python3上運行的東西,你可以傳遞sys.stdout.write。這不寫一個換行符(不像print) - 它像任何其他文件對象一樣。

+1

+1 - 好點 - 但可能值得添加隱含的EOL寫入... – 2012-08-03 16:25:32

+0

@JonClements - 好點。更新。 – mgilson 2012-08-03 16:27:31

相關問題