私は 2007年のAdvanced PythonまたはPythonの理解 に関するビデオを見ていました。18'27に "スピーカーは" Python and
とor
は2つの値のいずれかを返しますが、not
は常にブール値を返します。 "これはいつですか。
私の知る限り、and
とor
もブール値を返します。
and
およびor
演算子は、True
やFalse
のような純粋なブール値ではなく、オペランドの1つを返します。
>>> 0 or 42
42
>>> 0 and 42
0
not
は常に純粋なブール値を返しますが、次のようになります。
>>> not 0
True
>>> not 42
False
Python docs:の標準ライブラリリファレンスから this テーブルを参照してください。
から Pythonドキュメント :
演算子は、引数がfalseの場合はTrueを生成せず、それ以外の場合はFalseを生成します。
式xとyは最初にxを評価します。 xがfalseの場合、その値が返されます。それ以外の場合は、yが評価され、結果の値が返されます。
式xまたはyは最初にxを評価します。 xが真の場合、その値が返されます。それ以外の場合は、yが評価され、結果の値が返されます。
Pythonのor
演算子は、最初のTruth-y値、または最後の値を返し、停止します。これは、フォールバック値を必要とする一般的なプログラミング割り当てに非常に役立ちます。
この単純なもののように:
print my_list or "no values"
何かが含まれている場合、これはmy_list
を出力します。それ以外の場合は、no values
を出力します(リストが空の場合、またはNone
...の場合)。
簡単な例:
>>> my_list = []
>>> print my_list or 'no values'
no values
>>> my_list.append(1)
>>> print my_list or 'no values'
[1]
フォールバックではなくガードが必要な場合は、最初のFalse-y値または最後の値を返し、停止するand
を使用した補完が使用されます。
このように:
my_list and my_list.pop()
これは、リストの一般的な事前値であるNone
またはlist.pop
で[]
を使用できないため便利です。
簡単な例:
>>> my_list = None
>>> print my_list and my_list.pop()
None
>>> my_list = [1]
>>> print my_list and my_list.pop()
1
どちらの場合も、ブール値以外の値が返され、例外は発生しませんでした。
@Frédéricの答えにいくつかのポイントを追加する必要があります。
それらのオペランドの1つを返しますか?
それは本当ですが、それはこの背後にある論理ではありません。 pythonでは、0以外の数値はTrueと見なされ、0以外の数値はFalseと見なされます。
(0と42-> FalseとTrue)= False。
そのため、0が返されます。
(0または42-> falseまたはTrue)= 42
その場合、オペランド42があるため、ステートメントはTrueになります。したがって、pythonは、ステートメントをtrueにするオペランドを返します。その場合。