Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの短絡技術?


プログラミングに不慣れな人によくある間違いは、ブール演算子の動作方法の誤解です。これは、Pythonインタープリターがこれらの式を読み取る方法に起因します。たとえば、最初に「and」および「or」ステートメントについて学習した後、式X =('x'または'y')は、変数Xが文字列'aの1つと同等であるかどうかを確認すると想定する場合があります。 'または'b'。これはそうではありません。私が言おうとしていることを理解するには、通訳との対話型セッションを開始し、次の式を入力します。

>>> 'x' == ('x' or 'y')
True
>>> 'y' == ('x' or 'y')
False
>>> 'x' == ('x' and 'y')
False
>>> 'y' == ('x' and 'y')
True

この時点で、andおよびor演算子は壊れているようです。最初の2つの式で、「x」が「x」と同等であるか、「y」が同等でないことは意味がありません。さらに、「y」が「x」および「y」と同等であることは意味がありません。インタプリタがブール演算子を使用して何をするかを調べた後、これらの結果は実際にあなたが求めているものとまったく同じになります。それはあなたが求めていると思うものとまったく同じではありません。

or式の場合、Pythonインタープリターは最初に最初のステートメントを受け取り、trueかどうかを確認します。最初のステートメントがtrueの場合、Pythonは2番目の引数を調べずにそのオブジェクトの値を返します。これは、または式の場合、値の1つが真であれば、すべてが真になるためです。プログラムは2番目のステートメントを調べません。ただし、最初のオブジェクト値がfalseと評価された場合、Pythonは2番目のステートメントをチェックし、その値を返します。前半が偽であったため、後半は式の真理値を決定します。インタプリタ側のこの「怠惰」は「短絡」と呼ばれ、多くのプログラミング言語でブール式を評価する一般的な方法です。

同様に、and式の場合、Pythonは短絡手法を使用して真理値の評価を高速化します。最初のステートメントがfalseの場合、全体がfalseである必要があり、そのオブジェクト値(false)を返します。それ以外の場合、最初の値がtrueの場合、2番目の値をチェックしてその値を返します。通訳者がコードを通過するときに「見る」ものを見てみましょう

最初のケース

'x' == ('x' or 'y') # Look at parentheses first, so evaluates "('x' or 'y")"
# 'x' is a nonempty string, so the first value is True
>>> 'x' == 'x' # the string 'x' is equivalent to the string 'x' , so our expression is True
True

2番目のケース

'y' == ('x' or 'y')# Look at parentheses first, so evaluates expression "('x' or 'y')"
# 'x' is a nonempty string, so the first value is True
#Return that first value : 'x'
'y' == 'x'# the string 'y' is not equivalent to the string 'x', so the expression is False

3番目のケース

>>> 'x' == ('x' and 'y')# Look at parentheses first, so evaluate expression "('x' and 'y')"
#'x' is a nonempty string, so the first value is True, examine second value
# 'y' is a nonempty string, so second value is True
#Return that second value as result of whole expression: 'y'
>>> 'x' == 'y'# the string 'x' is not equivalent to the string 'y', so expression is False
False

4番目のケース

>>> 'y' == ('x' and 'y')# Look at parenthese first, so evaluates expression "('x' and 'y')"
True
# 'x' is a nonempty string, so the first value is True, examine second value
# 'y' is a nonempty string, so second value is True
# Return that second value as result of whole expression: 'y'
>>> 'y' == 'y'# the string 'y' is equivalent to the string 'y', so expression is True
True

短絡評価とは、ANDやORなどのブール式を評価するときに、式を満たすまたは否定する最初の条件を見つけたらすぐに停止できることを意味します。

公式ドキュメントで説明されている短絡:

操作
結果
説明
xまたはy
xがfalseの場合、y、それ以外の場合x
最初の引数がfalseの場合にのみ、2番目の引数(y)を評価します
xおよびy
xがfalseの場合、x、それ以外の場合はy
最初の引数(x)がTrueの場合にのみ、2番目の引数(y)を評価します
xではありません
xがfalseの場合はTrue、それ以外の場合はFalse
ブール演算子以外の演算子よりも優先度は低くありません


  1. Pythonのissuperset()

    この記事では、Pythonでのissuperset()と、さまざまな分野でのその実装について学習します。 このメソッドは、セットBのすべての要素に引数として渡されるすべての要素セットAが含まれている場合はブール値Trueを返し、Aのすべての要素がBに存在しない場合はfalseを返します。 これは、BがAのスーパーセットである場合、それを意味します returns true; else False 例 いくつかの例を見てみましょう A = {'t','u','t','o','r','i',

  2. PythonでのQuine

    Quineは、入力を受け取らないプログラムですが、出力を生成します。独自のソースコードが表示されます。さらに、Quineにはいくつかの条件があります。プログラム内でソースコードファイルを開くことができません。 サンプルコード a=a=%r;print (a%%a);print (a%a) 出力 a=a=%r;print (a%%a);print (a%a) このクワインはどのように機能していますか? ここでは、単純な文字列フォーマットが機能しています。変数「a」を定義し、a内に「a =%r; print(a %% a)」を格納します。次に、aの値を出力し、%rをaの値に置き換