2

Python での次のステートメントについて質問があります

if not x % y: 
    # do something

これをコードで見て実験した後、モジュロがゼロ以外に評価される場合、「何かをする」コードをスキップすることがわかりました。

私の質問は、暗黙の条件を持つ If ステートメントと If not ステートメントに関する一般的なルールはありますか? また、このような Python の「トリック」に関する適切なリファレンスはありますか?

大雑把な質問で申し訳ありませんが、最初に見たときはループに陥りました。私はこれらの短い手のトリックをできるだけ多く学びたいです!

4

3 に答える 3

5
  • Noneは偽です。
  • ゼロでない数値は真と見なされます。0偽です
  • どんな内容の文字列も真です。""偽です
  • コンテナに何かが入っている場合は true です。[]()、および{}(およびその他の空のコンテナー) は false

__len__()これはorを定義することで独自の型でオーバーライドできます__nonzero__()(後者は__bool__()Python 3 で命名されています)。たとえば、true と評価されるゼロを定義することもできます。

class trueint(int):
    def __nonzero__(self):
        return True
    __bool__ = __nonzero__    # Python 3

truezero = trueint(0)

if truezero:
    print("yep, this zero is true!")

Python プログラマーを混乱させるので、おそらくこれを行うべきではありませんが、可能です。

于 2012-09-26T01:36:55.420 に答える
2

Python には「暗黙の条件」などというものはありません。真の値と偽の値があります。

これらは誤りです:

  • None
  • 0 (またはそれに等しい任意の数)
  • 空のシーケンス ( ''u''b''[]())、マッピング ( {})、またはセット ( {,})
  • __nonzero__()メソッドから false を返すオブジェクト

そうでないことが証明されるまで、それ以外はすべて真と見なされます。

于 2012-09-26T01:38:08.180 に答える
1

この動作は Python では Truthiness と呼ばれます: http://www.udacity.com/wiki/CS258%20Truthiness%20in%20Python

于 2012-09-26T01:42:46.333 に答える