如果不是x%y:做点什么

时间:2012-09-26 01:33:41

标签: python modulo

我对Python中的以下语句有疑问

if not x % y: 
    # do something

在一段代码中看到这个并进行实验后,我发现如果modulo评估为零,那么它将跳过“做某事”代码。

我的问题是,是否存在关于隐含条件的If和If语句的一般规则,是否有像这样的Python“技巧”的良好引用?

我为这个广泛的问题道歉,但是当我第一次看到它时,这让我陷入了困境。我想尽可能多地学习这些简单的技巧!

3 个答案:

答案 0 :(得分:5)

  • None是假的。
  • 非零的数字被视为真; 0是假的
  • 任何内容的字符串都是真的; ""是假的
  • 其中包含任何内容的容器都是真的; [](){}(和其他空容器)都是假的

可以通过定义__len__()__nonzero__()(后者在Python 3中命名为__bool__())来覆盖您自己的类型。例如,您甚至可以定义一个评估为真的零:

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

truezero = trueint(0)

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

你可能不应该这样做,因为它会让Python程序员感到困惑,但你可以。

答案 1 :(得分:2)

Python中没有“隐含条件”这样的东西;有真正的价值观,而且有错误的价值观。

这些都是假的:

  • None
  • 0(或任何等于它的数字)
  • 空序列(''u''b''[]()),映射({})或集合({ {1}})
  • {,}方法
  • 返回false的对象

除非另有证明,否则其他任何事情都应被视为真实。

答案 2 :(得分:1)

此行为在Python中称为“真实性”:http://www.udacity.com/wiki/CS258%20Truthiness%20in%20Python