Python三項計算機の使い方と短絡論理手法の紹介

高洛峰
リリース: 2017-03-20 10:16:04
オリジナル
1555 人が閲覧しました

今日他の人のコードを見ていてこんな書き方を見つけて、踏み込みやすい落とし穴だと感じたので

短絡ロジック

をメモしました。

Pythonで論理演算を行う際にデフォルトで使用される ショートサーキットロジックと呼ばれる演算ルールです。

print True and 1
# 1
print True or 1
# True
print False and 1
# False
print False or 1
# 1
ログイン後にコピー

のコードを直接見ると、それがわかります。 全体の計算結果はブール値である必要はありません。上記の式のさまざまな結果は、Python で簡単に言うと、短絡ロジックです。式全体が True か False かを判断すると、後続の計算は実行されません。これは、ロジックが短絡され、後続の式が無視されることを意味します。たとえば、True または 1</code の結果です。 > は <code>True です。 かは関係ありません。その後に値がある場合、式全体の結果は True でなければなりません。そのため、Python が True を認識すると、 を実行し、or を参照すると、次の 1 は表示されず、1 は短絡され、True が返されます。 についても同様です。 >False と 1Falseand が表示されます。式全体の結果は False でなければなりません。したがって、1 は短絡され、False が返されます

同様に、False または 1</ code> は、<code>False と < であるため、1 を返します。 code>or では式全体の結果を判断できません。式全体が True か False かは、or によって決まります。そのため、Python は式全体を読み取る必要があります。なので、1 が返されます。True or 1的结果为True就是因为不管or后面是任何值, 整个式子的结果都必定是True, 所以Python看到True, 看到or, 后面的1就不看了, 1被短路了, 返回了True; 同样的False and 1也是一样, 看到False然后是and不管后面是什么, 整个式子的结果必定是False, 所以1被短路了, 返回False.

相应的, 为什么False or 1会返回1, 就是因为Falseor判断不了式子的结果, 整个式子是True还是False, 是由or后面的值来决定的, 所以Python要把整个式子看完, 所以返回1.

明白了什么是短路逻辑之后, 我们看一看三目运算符

三目运算符

三目运算符, 又叫三元运算符. 熟悉Java的同学可能会知道, 它的形式是这样的b?x:y, 对于这个表达式来说, 如果条件bTrue, 那表达式的结果就是x, 如果bFalse, 那表达式的结果就是y. 这是一种很方便的写法, 比if语句简洁很多.

但Python中早期没有类似写法的三目运算符, 所以就出现了一种利用短路逻辑, 用andor来模拟三目运算符的写法, 下面我们看代码

A = X and &#39;table&#39; or False
ログイン後にコピー

这句代码就是在利用短路逻辑模拟三目运算符, 当XTrue的时候, A会被赋值为&#39;table&#39;, 当XFlase的时候, A会被赋值为False;

乍一看好像很不错, 但这种写法却有个坑, 我们看这句代码

True and 0 or 1
ログイン後にコピー

如果我们把刚才的写法当三目运算符来使用, 那么条件语句是True, 表达式应该返回0才是我们期望的结果, 但实际上这个表达式会返回1; 因为True and 0的值为True, 整个表达式的值是由or之后的值来决定的, 所以Python会对后面的值做判断, 导致返回了1, 这就是为什么and...or这个写法有坑的原因

正确写法

如果想在Python中使用三目运算符, 可以使用if...<a href="http://www.php.cn/wiki/111.html" target="_blank">else</a>写法, 具体看代码

# <为真时的结果> if <判定条件> else <为假时的结果>0 if True else 1
ログイン後にコピー

if...else的写法, 结果就会跟我们期望的相同, 当条件为True时, 返回前面的值, 条件为False

短絡ロジックとは何かを理解した後、三項演算子を見てみましょう。 🎜🎜🎜三項演算子🎜🎜 三項演算子。学生によく知られた三項演算子 🎜 シンボルとも呼ばれます。 Java では、この式の形式が b?x:y のようなものであることを認識している可能性があります。たとえば、条件 bTrue の場合、式の結果は x で、bFalse の場合、式の結果は y になります。これは、if よりも優れた非常に便利な記述方法です🎜ステートメントははるかに単純です。🎜🎜しかし、 Python の初期には、同様の三項演算子がなかったため、and を使用する短絡ロジックを使用する方法があり、or は次の記述をシミュレートするために使用されます。以下のコードを見てみましょう🎜rrreee🎜 このコードは、XTrue の場合、AXFlase の場合、 /code> は 'table' に割り当てられます。 上記の書き方を三項演算子として使用すると、次のようになります。条件文は True であり、式は期待される結果である 0 を返すはずですが、実際にはこの式は 1 を返します。 True および 0 の値は True であるため、式全体の値は によって決定されます。または はその後の値によって決定されます。 Python はその後の値を判断して 1 を返します。これが、and...or の書き方が難しい理由です。理由🎜🎜正しい書き方🎜🎜。 Python で三項演算子を使用したい場合は、if...<a href="http://www.php.cn/wiki/111.html" target="_blank">else を使用できます🎜 </a>if...else を使用してコード 🎜rrreee🎜 を見てください。条件が True の場合、結果は期待どおりになります。 、前の値を返し、条件が False の場合は後の値を返します。落とし穴はありませんが、条件と戻り値の順序に注意して書く必要があります。 Java と同じです。三項演算子は異なります。間違えないでください🎜

以上がPython三項計算機の使い方と短絡論理手法の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート