2017-12-19 13 views
1

私はコード内でreturn l1 or l2を使用している誰かを見て、l1とl2の両方がリストオブジェクトにリンクされていることを知るまで、これらの2つのシングルトン値を理解したと思っていました。 l2。Pythonの `NoneまたはFalse`、` FalseまたはNone`、 `NoneおよびFalse`、` FalseおよびNone`の結果を理解するにはどうすればいいですか?

このコードはかなり短くて分かりやすいので、良いコードです。次に、ここで何が起こっているのか把握するためのコードを書きます。

print (True or 'arbitrary') #True 
print (False or 'arbitrary') #arbitrary 
print (None or 'arbitrary') #arbitrary 

印刷結果は期待通りです。しかし、私はNoneFalseを一緒に入れようとします。本当に奇妙なことが起こった。

print (False or None) #None 
print (None or False) #False 
print (None or False or True) #True 

だから、私の推測では、return A or Bのルールは以下のとおりです。(その後、まずAとB)

  • 順に復帰最初の真(ないなし、未偽)値

  • True値がない場合は、最後の値が返されます。

最後に、このコードを実行して推測を確認します。

print (None or False or True or None) # True 
print (None or False or None) # None 
print (False or None or False) # False 

結果は私の理論を証明するようです。しかし、誰ももっと説明をしていますか?

また、andを使用すると面白いことがあります。どうして?

print (None and False) #None 
print (False and None) #False 
+2

[FalseまたはNone対False]の可能な複製(https://stackoverflow.com/questions/3914667/false-orone-vs-none-or-false) – Galen

答えて

3

短い答えは「と」最初の偽の値または最後の真の値を返し、「または」最初の真または偽の最後の答えを返すことです。

>>> None or False 
False 
>>> False or None 
>>> False and None 
False 
>>> None and False 

...

>>> 0 or 3 or 4 
3 
>>> 5 and 0 and 6 
0 
>>> 5 and 0 or 6 
6 
>>> False or {} or 0 
0 
>>> 3 and 4 and 5 
5 
1
Pythonで

空の文字列、設定、リスト、辞書、他の容器または0は、すべての論理演算のためにはFalseと同等です。空でないコレクションと非ゼロの数値は論理的に真です。

以前に論理的に真の式が見つからなかった場合、 'または'は最後の式が返されます。その表現は、上記の規則によって論理的に評価されます。

0

推測する必要はありません。 orのために、PythonのReference Manual

「; xが真である場合、その値が返され、そうでない場合、yが評価され、結果の値が返されます。表現x or yは最初xを評価する」と言います

つまり、x if x else yxはただちに評価され、必要な場合はy)です。

andの場合は、 'true'を 'false'に変更してください。

x and yの式は、最初にxと評価されます。 xがfalseの場合、その値が返されます。それ以外の場合はyが評価され、結果の値が返されます。

つまり、x if not x else yxはただちに評価され、必要な場合はy)です。

+0

このリンクは非常に便利です。だから私はこれを私の問題の答えとして受け入れました。どうもありがとうございました。繰り返しますが、ここに非常に詳細な説明があるURLがあります - https://docs.python.org/3/reference/expressions.html#boolean-operations –

関連する問題