2

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

if not x % y: 
    # do something

在一段代码中看到这一点并进行实验后,我发现如果模计算结果为零以外的任何值,它将跳过“做某事”代码。

我的问题是,是否有关于带有隐含条件的 If 和 If not 语句的一般规则,并且对于这样的 Python“技巧”有什么好的参考吗?

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

4

3 回答 3

5
  • None是假的。
  • 不为零的数字被认为是真实的;0是假的
  • 任何内容的字符串都是真实的;""是假的
  • 里面有任何东西的容器都是真的;[], (), 和{}(以及其他空容器)是错误的

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

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 回答