2012-09-26 29 views
2

我有一个关于在Python如果没有X%Y:做一些

if not x % y: 
    # do something 

下面的语句问题在一段代码见状和试验后我发现,如果模计算结果为任何东西,但零它”我会跳过“做某事”的代码。

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

我对这个广泛的问题表示歉意,但是当我第一次看到它时,这让我产生了循环。我想尽可能多地学习这些简短的技巧!

+1

文档参考确认的答案[这里在第5.1节](http://docs.python.org/library/stdtypes.html#truth-value-testing) 。 – DSM

回答

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程序员,但你能

+0

要清楚,说 - 无是假,0是假,“”是假的 - 是不正确的。他们*评估*为假。 – jterrace

+0

字符串one只是容器的特例。 – Hammerite

+0

@Hammerite:的确如此,但我想我会特别提出这个问题,因为对于提出这个问题的人来说,这可能并不明显。 – kindall

2

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

这些假:

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

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