2016-07-10 1 views
6

私は最近、以下の戻りTrueことを発見:ここで、python docsでは `in`演算子をチェーンすることができますか?

'a' in 'ab' in 'abc' 

私は、このようなa < b < cとして、連鎖Pythonの比較を認識してんだけど、私は、これは法的なことについてのドキュメントには何も見ることができません。

これはCPythonの実装で偶然の機能ですか、またはこの動作が指定されていますか?

答えて

8

これは誤った機能ではなく、完全に指定された動作です。オペレータチェーンはComparison operators sectionに定義されています。

比較は任意に連鎖させることができ、例えば、そのyは一度だけ評価されます(ただし、x < yが発見された場合の両方のケースでzが全く評価されていない以外x < y <= zは、x < y and y <= zに相当します偽であること)。

inは、比較演算子の1つです。同じセクションから:

comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "<>" | "!=" 
        | "is" ["not"] | ["not"] "in" 

ませ例外はあまり意味がないかもしれない組み合わせのために作られていません。

例として使用した具体的な式は、として実行され、'ab'リテラルは1回だけ実行(ロード)されます。

+0

別のページで[比較](https://docs.python.org/3/library/stdtypes.html#comparisons)セクションを見ていましたが、これは 'in'のリストにはありません – Eric

+1

@Ericそのセクションの最下位:*同じ構文上の優先順位を持つ2つ以上の操作、 'in'と' not in'はシーケンスタイプ(下記)のみでサポートされています*この制限のため、テーブルにリストされていません。 –

関連する問題