なぜこれが機能しないのですか?
lambda: print "x"
これは単一のステートメントではありませんか、それとも別のものですか?ドキュメントはラムダで何が許可されているかについて少しまばらです...
なぜこれが機能しないのですか?
lambda: print "x"
これは単一のステートメントではありませんか、それとも別のものですか?ドキュメントはラムダで何が許可されているかについて少しまばらです...
回答:
A lambda
の本体は単一の式でなければなりません。Python 2.xでは、print
はステートメントです。ただし、Python 3ではprint
は関数です(関数アプリケーションは式なので、ラムダで機能します)。最新のPython 2.xを使用している場合は、バック互換の印刷機能を使用できます(上位互換性のために:)。
In [1324]: from __future__ import print_function
In [1325]: f = lambda x: print(x)
In [1326]: f("HI")
HI
from __future__ import print_function
コードの先頭にある必要があるのでしょうか?thx
print()
、組み込みメソッドがあります。
これを単純なスタブに使用している場合、これを使用します。
fn = lambda x: sys.stdout.write(str(x) + "\n")
完璧に動作します。
あなたが書いたものは
def anon():
return print "x"
構文エラーも発生しますが、Pythonでは2.xxで出力する値を割り当てることができません。python3ではあなたは言うことができます
lambda: print('hi')
また、printをステートメントではなく関数に変更したため、問題なく動作します。
from __future__ import print_function
py2.xでこれを有効にするもある
lambda: sys.stdout.write('hi')
ラムダの本体は、値を返す式でなければなりません。 print
は、ステートメントであるため、何も返しませんNone
。同様print
に、変数の結果を割り当てることはできません。
>>> x = print "hello"
File "<stdin>", line 1
x = print "hello"
^
SyntaxError: invalid syntax
割り当てはステートメントであるため、ラムダに変数の割り当てを配置することもできません。
>>> lambda y: (x = y)
File "<stdin>", line 1
lambda y: (x = y)
^
SyntaxError: invalid syntax
このようなことができます。
関数を作成して、printステートメントを関数に変換します。
def printf(text):
print text
そしてそれを印刷します:
lambda: printf("Testing")
def printf(fmt, *args): print(fmt % args)
Python 3.xでは、ラムダのセマンティクスを変更せずに、ラムダでprintが機能します。
これは特別な方法で使用され、デバッグに非常に便利です。この「遅い答え」を投稿します。これは、私がよく使用する実用的なトリックだからです。
「計装されていない」ラムダが次のとおりだとします。
lambda: 4
次に、「計装」ラムダは次のとおりです。
lambda: (print (3), 4) [1]