2017-06-29 12 views
25

誤って式に複数のinキーワードを使用しましたが、コードは引き続き動作します。 複数の繰り返しの `in`キーワード

"a" in "bar" in "foo" # in ... ? 

は単純に私は、これは ("a" in "bar") in "foo"または "a" in ("bar" in "foo")に同等であったが、両方が有効ではありませんので、それはそうではないことを考えた:の意味は何ですか

。 I取得python2または3

+2

おそらく ' '' 'バー' と' X

+1

@ Ev.Kounis:なぜ?私はドキュメントでそれを見つけることができません。そして "d"の "c"の "b"の "a"の意味は何ですか? " 『中『の』 –

+1

'(「」「B」において)であろう拡張により@RuggeroTurra、及び(cで「B」「)と(」D「における 『C』) 'と'』バーa''」内の '「バー」' false'をであるため、「AAA」 '* *は' false'に評価され、私はあなたのポイントが何であるかはよく分からないん。 – jamesdlin

答えて

40

inで同じ動作を比較演算子とみなされ、そしてPython's documentation for themから:

比較は任意に連鎖させることができ、例えば、そのyが評価された以外x < y <= zは、x < y and y <= zに相当します(ただし、どちらの場合もx < yが偽であると判断された場合、zは評価されません)。

は正式には、、B、C場合、...、YZは...、OP2、式及びOP1あり、OPN比較されa op1 b op2 c ... y opN za op1 b and b op2 c and ... y opN zに相当しますが、各式の評価は最大で1回です。

4

Pythonは(あなたが括弧でグループ化/流量を制御することができ、THO)左から右に評価し、比較演算子は式任意ように連鎖することができる:

"a" in "bar" in "foo" in "baz" 

が本質的に終わります

Falseに解決されます。

+8

もしそれがちょうど左から右にあったならば、それは '((" foo 『という中)『バー」で』』)で 『バズ』 ' –

+5

評価順序が問題の核心ではありません – jamesdlin

+0

@jamesdlin - 。評価は、それが発生した瞬間を壊すので、それは比較演算子連鎖でかなり重要偽の比較 - 「foo」というにおける '「F」しかし、最初の(LTR順)比較が失敗し、Pythonが勃発として'「F」「バー」でNONE'では完全に有効ですNone'の場合は 'TypeError'となります。 – zwer

1

これは以下を意味するようだ:

("a" in "bar") and ("bar" in "foo") - 次は役立つかもしれないかFalse

  • "a" in "bar" in "foo" =>False
  • "a" in "bar" in "foobar" =>True
  • "b" in "bar" in "foobar" = >True
  • "c" in "bar" in "foobar" =>False

私はそれが"a" in ("bar" in "foo")ていたかもしれないと最初は思ったが、それは明らかに、以下を返します:

TypeError: argument of type 'bool' is not iterable

("bar" in "foo")ため、戻りFalse

編集固定明らかに誤植

+3

'' foo "' => 'False'の" bar "の" b "です。 'False'は' True'でなくてはなりません – xiaoyi

+9

最初のコード行に 'と'の後ろに 'in'が追加されていますか? – Angew

+0

謝罪、そこにいくつかのタイプミスがあった - 今は意味をなさない:) –

関連する問題