18

通常の関数の場合、mapうまく機能します。

def increment(n):
    return n+1
l = [1, 2, 3, 4, 5]
l = map(increment, l)
print l
>>> [2, 3, 4, 5, 6]

ただし、関数print内に配置されているmap場合:

l = [1, 2, 3, 4, 5]
l = map(print, l)
print l

pythonは文句を言います:

l = map(print, l)
            ^
SyntaxError: invalid syntax

何がprint特別なのですか?print(x)有効な関数呼び出しもありませんか? 上記のコードは、python 2.7 でテストされています。

4

6 に答える 6

22

Python 2.x では、print関数ではなくステートメントです。これを Python 3.x で試すと、うまくいきます。

Python 2.x では、print(x)構文エラーではないと言えますが、実際には関数呼び出しではありません。1 + (3)はPython 2.xと同じです1 + 3print(x)print x

Python 2.x では、これを行うことができます。

def prn(x):
    print x

次に、次のことができます。

map(prn, lst)

そしてそれはうまくいくでしょう。を返すlst = map(prn, lst)ため、おそらくやりたくないことに注意してください。そのため、値のリストを値だけの同じ長さのリストに置き換えます。prn()NoneNone

編集: Python 2.x の他の 2 つのソリューション。

の動作を完全に変更したい場合はprint、次のようにします。

from __future__ import print_function

map(print, lst)

これはprintPython 3.x と同じように関数になるため、 で動作しmap()ます。

または、これを行うことができます:

from pprint import pprint

map(pprint, lst)

pprint()物を印刷する機能であり、組み込みとして利用できます。デフォルトとどう違うのか正確にはわかりませんprint(「プリティプリント」機能だと言っていますが、それがどのように違うのか正確にはわかりません)。

また、PEP 8 標準によるとl、変数名として使用することは推奨されていないためlst、例では代わりに使用しています。

http://www.python.org/dev/peps/pep-0008/

于 2012-08-01T21:53:23.533 に答える
8

2.xで印刷をマップするためのより良い方法は、

from __future__ import print_function
于 2012-08-01T21:58:49.667 に答える
4

他の人が言ったように、Python 2.x ではprintステートメントです。本当に Python 2.x でこれを行いたい場合は、次を使用できますpprint

from pprint import pprint
l = [1, 2, 3, 4, 5]
p = map(pprint, l)
于 2012-08-01T21:54:58.180 に答える
2

print関数ではないからです。

もちろん、print-wrapper を作成することもできます:

>>> def p(x):
...   print x
... 
>>> l = [1, 2, 3, 4, 5]
>>> l = map(p, l)
1
2
3
4
5
于 2012-08-01T21:55:23.187 に答える
1

あなたの行から、これは関数ではなくprint lステートメントであるpython2であると思います。print

于 2012-08-01T21:54:02.977 に答える