ホームページ  >  記事  >  バックエンド開発  >  Pythonでのandとorの実際の使い方を詳しく紹介します。

Pythonでのandとorの実際の使い方を詳しく紹介します。

零下一度
零下一度オリジナル
2017-05-26 11:58:027847ブラウズ

and と or の特別なプロパティ

Python では、and と or はブール論理演算を実行しますが、ブール値を返すのではなく、実際に比較する値の 1 つを返します。例を見てみましょう。

>>> 'a' and 'b'        
'b'
>>> '' and 'b'         
''
>>> 'a' and 'b' and 'c'
'c'

and を使用する場合、式の値はブール コンテキストで左から右に評価されます。 0、''、[]、()、{}、None はブール値コンテキストでは false です。それ以外は true です。まあ、ほとんどすべてです。デフォルトでは、ブール値コンテキストのクラス インスタンスは true と評価されますが、クラス インスタンスを false と評価させる特定のメソッドをクラス内に定義できます。クラスとこれらの特別なメソッドについては、第 5 章で学習します。ブールコンテキスト内のすべての値が true の場合、最後の値を返します。この例では、 and 計算は 'a' を true に評価し、次に 'b' を true に評価し、最後に 'b' を返します。
ブールコンテキストの値が false の場合、最初の false 値を返します。この例では、'' が最初の false 値です。
すべての値は true なので、最後の true 値 'c' を返します。

>>> 'a' or 'b'         
'a'
>>> '' or 'b'          
'b'
>>> '' or [] or {}     
{}
>>> def sidefx():
...     print "in sidefx()"
...     return 1
>>> 'a' or sidefx()    
'a'

or を使用する場合、値は、 and と同様に、ブール値コンテキストで左から右に評価されます。値が true の場合、またはその値をすぐに返します。この場合、「a」が最初の真理値です。
または '' を false に評価し、その後 'b' を true に評価して 'b' を返します。
すべての値が false の場合、または最後の false 値を返します。または、'' を false に評価し、次に [] を false に評価し、次に {} を false に評価し、最後に {} を返します。
ブール値コンテキストの or は、最初の true 値が見つかるまで式を評価し、その後残りの比較値を無視することに注意してください。一部の値に副作用がある場合、このプロパティは重要です。ここで、function Sidefx は決して呼び出されません。これは、 or 演算が 'a' を true と評価するため、すぐに 'a' を返すためです。

C 言語のハッカーであれば、bool ? a : b 式に精通している必要があります。 bool が true の場合、式は a に評価され、それ以外の場合は b になります。 Python での および および or の動作に基づいて、同じことを実現できます。

例 . and-or テクニックの紹介

>>> a = "first"
>>> b = "second"
>>> 1 and a or b
'first'
>>> 0 and a or b
'second'

この構文は、C 言語の bool ? a : b 式に似ています。式全体が左から右に評価されるため、and 式が最初に評価されます。 1 と 'first' は 'first' と評価され、次に 'first' または 'second' は 'first' と評価されます。
0 と 'first' は False に評価され、次に 0 または 'first' は 'second' に評価されます。

ただし、この Python 式はブール論理演算のみを実行し、言語の特定のコンポーネントではないため、これは and-or 手法と C 言語の bool a : b 構文の非常に重要な違いです。 a が false の場合、式は期待どおりに機能しません。 (私がこの問題に何度も苦労したことをご存知ですか?)

例: and-or トリックが機能しない場合

>>> a = ""
>>>b = "second"
>>> 1 and a or b        
'second'

a は空の string であるため、Python のブール値コンテキストでは、空の文字列は false とみなされ、1 と '' の計算値は ''、最後に '' または '秒' の計算値は '秒' と見なされます。おお!この値はあなたが望むものではありません。

and-or トリック、bool および a または b 式は、ブール値コンテキストで a が false と評価される場合、C 言語の式 bool a : b のように機能しません。

and-or トリックの背後にある本当のトリックは、a の値が決して false にならないようにすることです。最も一般的な方法は、a [a] と b [b] を作成し、戻り値リストの最初の要素 (a または b のいずれか) を使用することです。

例: 安全and-or トリックを使用する

>>> a = ""
>>> b = "second"
>>> (1 and [a] or [b])[0]
''

[a] は空ではないリストであるため、false になることはありません。 a が 0 や ''、あるいは他の false 値であっても、要素が 1 つあるため list [a] は true になります。

今のところ、このヒントは価値がある以上に問題が多いように思えるかもしれません。結局のところ、if ステートメントを使用して同じことを実現できるのに、なぜわざわざ苦労する必要があるのでしょうか。多くの場合、2 つの定数値のどちらかを選択することになりますが、 a は常に true と評価されることがわかっているため、この単純な構文を使用して心配する必要はありません。より洗練された形式のセキュリティを使用する十分な理由がまだあります。たとえば、ラムダ関数など、Python 言語では if ステートメントが許可されない状況があります。

: ここの文は左から右に解釈されます。このように理解できます。
and文:
0and* *が0か1かを考慮する必要はなく、結果は0になります
1and* 結果を決定するには、*が0か1かを考慮する必要があります。

1or* 次の*を考慮する必要はありません、結果は 1 です
0or* 結果を決定するには、次の * を考慮する必要があります

[関連おすすめ]

1 Python and, or and and- or 構文の概要

2. Python での and と or の使い方を分析する

3. Python での and / or の操作ロジック例のチュートリアルを共有する

4. Python の論理演算子 and の概要

5.

Python: 論理的な判断と操作 Talisman の例

以上がPythonでのandとorの実際の使い方を詳しく紹介します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。