2017-06-02 7 views
3

ラムダ関数でOR演算子を使用するコード例がO Reilly Programming Pythonブックにあります。テキストには「[コード]は2つの式を強制的に実行するためにまたは演算子を使用する」と記載されています。Pythonラムダ関数でのOR演算子の使用

これはどのように動作しますか?

widget = Button(None, # but contains just an expression 
text='Hello event world', 
command=(lambda: print('Hello lambda world') or sys.exit())) 
widget.pack() 
widget.mainloop() 
+0

これは「偽」の値を返す関数と、わかりやすく悪い形を意味する関数に対してのみ機能します。 – tdelaney

+0

私はその教科書の尊敬を失ったばかりです... – Shadow

答えて

2

Pythonのすべての機能が値を返します。明示的なreturn文がない場合は、Noneを返します。ブール式としてのNoneFalseと評価されます。したがって、printNoneを返し、or式の右側は常に評価されます。

1

ブール代数or演算子は、左から順に候補を評価することで最初に発生する真理値を返します。したがって、あなたのケースでは、それは最初に'Hello lambda world'を印刷するために使用され、その結果、None(偽と見なされます)が返され、プログラムを終了するsys.exit()と評価されます。

lambda: print('Hello lambda world') or sys.exit() 

Python Documentation

最初x or yx評価される式。 xが真の場合、その値は です。そうでない場合はyが評価され、結果の値は になります。

関連する問題