2012-08-03 12 views
9

Pythonではすべてがオブジェクトであり、簡単に渡すことができます。はPythonで関数を出力していますか?

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

をしかし、私は

a = print 

を行う場合、私はSyntaxErrorを得る:

だから私は行うことができます。なぜそうなのか ?

答えて

20

によってコールそれに必要としない、印刷は声明ない機能です。 2.6+では、それをfrom __future__ import print_functionを使用して、指定されたモジュール内の関数にすることができます。 Python 3.xでは、渡すことができる関数です。

+4

'__future__'では+1です。 – mgilson

+4

将来のステートメントは明示的です。それは、同じモジュール内でそれを期待するコードにのみ影響を与えるので、コードを壊すことはありません。 – jfs

+0

@JFSebastian - ありがとう - 私はいつもそれをインタラクティブなインタプリタプロンプトでタイプされた将来のステートメントは、通訳セッション。 –

3

printは、3.x以前のPythonでは機能しません。それは、一つでも似ていない、あなたは、Python 2.xでは(params)

6

python2では、printがステートメントです。 from __future__ import print_functionを行う場合は、あなたが説明したようにすることができます。あなたが試したことは、printが関数になったので、python3では何もインポートせずに動作します。

これはPEP3105

4

他の回答が正しいで覆われています。 printは文であり、python2.xの関数ではありません。あなたが持っているものはpython3で動作します。私が追加しなければならないのは、python2とpython3で動作するものをお望みなら、sys.stdout.writeを渡すことができるということだけです。これは改行を書きません(printと違って) - 他のファイルオブジェクトと同じように動作します。

+1

+1 - 良い点 - 暗黙のEOLを追加する価値があるかもしれません... –

+0

@JonClements - 良い点。更新しました。 – mgilson

関連する問題