Python での および / または の操作ロジックに関するチュートリアルの例を共有します

零下一度
リリース: 2017-05-26 11:58:44
オリジナル
2603 人が閲覧しました

pythonのandとor演算の核となる考え方

——短絡ロジック

最近私はLiao XuefengのPythonチュートリアルを読み始めました、そして私は「Pythonを徹底的に学ぶ」を入れるつもりでした最後の数章は少し難しく感じられるので、最初に「方法」から始めてください (OK、私は弱すぎますが、ゆっくりと一歩ずつ進めてください)。Liao Xuefeng のチュートリアルを読んだ後に振り返ってみると、私はそうかもしれないと思いました。いくつかのアイデアを得ることができます。

さて、今日これを書いた理由は、Liao Xuefeng のチュートリアルのフィルターの章に登場したためで、これは少し混乱していました。最初に読んだところ、コードは次のとおりです。

    #把一个序列中的空字符串删掉

    1>  def not_empty(s):
    2>      return s and s.strip()
    3>
    4>  filter(not_empty, ['A', '', 'B', None, 'C', '  '])
ログイン後にコピー

その後、 および / または に関する動作ロジックをいくつか確認し、私なりの理解を加えて次のようにまとめました(かどうかはわかりません)間違いがあります。漏れがあれば修正してください):

1 . 論理演算子が含まれています まず、Python のどのオブジェクトが False として扱われるかということから始めましょう。そしてどれが真実なのでしょうか?

**Python では、任意の数値型の None、0、空の文字列 ""、空のタプル ()、空のリスト []、空の辞書 {} は、カスタム型と同様に False として扱われます。 ) または

len () メソッドが実装されており、メソッドは 0 または False を返し、そのインスタンスも False として扱われ、他のオブジェクトは True になります。 **

以下は最も単純な論理演算です:

    True  and True    ==> True                  True  or True    ==> True
    True  and False   ==> False                 True  or False   ==> True
    False and True    ==> False                 False or True    ==> True
    False and False   ==> False                 False or False   ==> False
ログイン後にコピー

上記の 2 点を使用して、いくつかの例を示します:

example 1

    >>> a = [0, 1, '' ,3]
    >>> a[0] and a[1]
    0
ログイン後にコピー

a[0] = 0, a[1] = 1, so a [ 0] と a[1] は 0 と 1 (False と True) になるので、0 (False) になります。

例2

    >>> a = [0, 1, '' ,3]
    >>> a[2] and a[1]
    ''
ログイン後にコピー

両方が同時にFalseの場合は、左側の値を返します。

2. 2 つ以上の論理演算子が含まれています

複数の論理演算子や / or がある場合、その演算ルールの中心的な考え方は短絡論理です。さて、短絡的なアイデアを見てみましょう (私の要約はインターネット上の他の人の意見とは異なる可能性があります。私の分析をゆっくり聞いてください):

は、左側の場合、左から右に動作します。 of or 論理値が True の場合、or 以降の式はすべて短絡され、or の左側の式が直接出力されます。

式は左から右に演算され、and の左側の論理値が False の場合、and の左側の式が出力されるまで、後続のすべての and 式が短絡されます。 or の左側は接続に参加します。

or の左辺が False、または and の左辺が True の場合、短絡ロジックは使用できません。

少し抽象的かもしれませんが、大丈夫、次にいくつか例を挙げてみましょう。

これは、Python がこれらの論理ステートメントを処理するときの短絡状況を直感的に理解できるようにする賢い方法です (私も他の人から学びました)

それでは、それらが all and ステートメントであると仮定して、簡単に始めましょう Or all orステートメント:

例 1

    1>  def a():
    2>      print 'A'
    3>      return []
    4>  def b():
    5>      print 'B'
    6>      return []
    7>  def c():
    8>      print 'C'
    9>      return 1
    10> def d():
    11>     print 'D'
    12>     return []
    13> def e():
    14>     print 'E'
    15>     return 1
    16>
    17> if a() and b() and c() and d() and e():
    18>     print 'ok'
    
    #显示结果如下
    A
ログイン後にコピー

a() の論理値は False で、その後に and ステートメントが続き、すべて短絡され、最後に a() の式が返されます。

例2

    1>  def a():
    2>      print 'A'
    3>      return 1
    4>  def b():
    5>      print 'B'
    6>      return 1
    7>  def c():
    8>      print 'C'
    9>      return []
    10> def d():
    11>     print 'D'
    12>     return []
    13> def e():
    14>     print 'E'
    15>     return 1
    16>
    17> if a() and b() and c() and d() and e():
    18>     print 'ok'

    #显示结果如下
    A
    B
    C
ログイン後にコピー

a()の論理値はTrueなので短絡できません 次に、b()で論理演算を行い、b()の論理値Trueを返します。 () と return c() 論理値 False の後に and ステートメントが続く場合、すべてが短絡され、最終的に c() の式が返されます。

例3

    1>  def a():
    2>      print 'A'
    3>      return 1
    4>  def b():
    5>      print 'B'
    6>      return []
    7>  def c():
    8>      print 'C'
    9>      return 1
    10> def d():
    11>     print 'D'
    12>     return []
    13> def e():
    14>     print 'E'
    15>     return 1
    16>
    17> if a() or b() or c() or d() or e():
    18>     print 'ok'

    #显示结果如下
    A
    ok
ログイン後にコピー

a()の論理値はTrueで、その後にor文が続き、すべて短絡されて、最後にa()の式が返されます。

例4

    1>  def a():
    2>      print 'A'
    3>      return []
    4>  def b():
    5>      print 'B'
    6>      return []
    7>  def c():
    8>      print 'C'
    9>      return 1
    10> def d():
    11>     print 'D'
    12>     return []
    13> def e():
    14>     print 'E'
    15>     return 1
    16>
    17> if a() or b() or c() or d() or e():
    18>     print 'ok'

    #显示结果如下
    A
    B
    C
    ok
ログイン後にコピー

a()の論理値はTrueなので短絡できません 次に、b()で論理演算を行い、b()の論理値Falseを返します。 () および return c() 論理値が True で、すべての後に or ステートメントが続く場合、すべてが短絡され、最終的に c() の式が返されます。

次に and と or ステートメントが共存する場合の状況について話しましょう:

例 5

    1>  def a():
    2>      print 'A'
    3>      return []
    4>  def b():
    5>      print 'B'
    6>      return []
    7>  def c():
    8>      print 'C'
    9>      return 1
    10> def d():
    11>     print 'D'
    12>     return []
    13> def e():
    14>     print 'E'
    15>     return 1
    16> def f():
    17>     print 'F'
    18>     return 1
    19> def g():
    20>     print 'G'
    21>     return []
    22> def h():
    23>     print 'H'
    24>     return 1
    25>
    26> if a() and b() and  c() and d() or e() and f() or g() and h():
    27>     print 'ok'

    #输出结果如下:
    A
    E
    F
    ok
ログイン後にコピー

ステートメントが非常に長い場合は難しいとは考えず、まず論理的に考えてみましょう。 a() の値が False で、その後に or ステートメントが続き、a() と b()、c() と d() の 3 つの and ステートメントがあり、すべて短絡されています。 a() または e() が True の場合、e() を出力します。e() および F() が True の場合、f() を出力します。or ステートメントが続く場合、後続のステートメントはすべて短絡されます。 (要約した短絡ロジックの 3 つのポイントを十分に理解していれば大丈夫です。) 3. 三項演算

演算子

python2.5 より前の Python には三項演算子 Guido がありませんでした。 Van Rossum 氏は、これは Python の簡潔化には役立たないと考えていますが、C、C++、Java プログラミングに慣れているプログラマーは、三項演算子をシミュレートするために and or or を使用しようとしていますが、これには Python の短絡ロジックが使用されています。 🎜🎜 三項演算子 bool ? a : b 、 bool が true の場合は a 、そうでない場合は b 。 🎜

  转化为 python 语言为:

        bool and a or b
ログイン後にコピー

  如何理解呢? 首先 a , b 都为真,这是默认的。如果 bool 为真, 则 bool and a 为真,输出 a ,短路 b 。如果 bool 为假,短路 a,直接 bool or b ,输出 b 。

  换一种更简单的写法:

       return a if bool else b
ログイン後にコピー

【相关推荐】

1. Python and、or以及and-or语法总结

2. 解析python中and与or用法

3. 详细介绍Python中and和or实际用法

4. 总结Python的逻辑运算符and

5. Python:逻辑判断与运算符实例

以上がPython での および / または の操作ロジックに関するチュートリアルの例を共有しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!