2012-08-03 156 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