web-dev-qa-db-ja.com

および/または演算子の戻り値

私は 2007年のAdvanced PythonまたはPythonの理解 に関するビデオを見ていました。18'27に "スピーカーは" Python andorは2つの値のいずれかを返しますが、notは常にブール値を返します。 "これはいつですか。

私の知る限り、andorもブール値を返します。

29
atp

andおよびor演算子は、TrueFalseのような純粋なブール値ではなく、オペランドの1つを返します。

>>> 0 or 42
42
>>> 0 and 42
0

notは常に純粋なブール値を返しますが、次のようになります。

>>> not 0
True
>>> not 42
False
47

Python docs:の標準ライブラリリファレンスから this テーブルを参照してください。

Boolean Operations

28
mgalgs

から 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

どちらの場合も、ブール値以外の値が返され、例外は発生しませんでした。

16
Reut Sharabani

@Frédéricの答えにいくつかのポイントを追加する必要があります。

それらのオペランドの1つを返しますか?

それは本当ですが、それはこの背後にある論理ではありません。 pythonでは、0以外の数値はTrueと見なされ、0以外の数値はFalseと見なされます。

(0と42-> FalseとTrue)= False。

そのため、0が返されます。

(0または42-> falseまたはTrue)= 42

その場合、オペランド42があるため、ステートメントはTrueになります。したがって、pythonは、ステートメントをtrueにするオペランドを返します。その場合。

0
dulaj sanjaya