【问题标题】:If not x % y: Do something如果不是 x % y:做点什么
【发布时间】:2012-09-26 01:33:40
【问题描述】:

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

if not x % y: 
    # do something

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

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

我对这个广泛的问题表示歉意,但是当我第一次看到它时,这让我陷入了困境。我想尽可能多地学习这些速记技巧!

【问题讨论】:

标签: python modulo


【解决方案1】:
  • 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 程序员感到困惑,但你可以。

【讨论】:

  • 要清楚,说 - None 是假的,0 是假的,“”是假的 - 不正确。他们评估为假。
  • 字符串一只是容器一的特例。
  • @Hammerite:是的,但我想我会特别指出它,因为对于开始提出这个问题的人来说可能并不明显。
【解决方案2】:

Python 中没有“隐含条件”这样的东西;有真值,也有假值。

这些都是假的:

  • None
  • 0(或任何与其相等的数)
  • 空序列(''u''b''[]())、映射({})或集合({,}
  • __nonzero__() 方法返回 false 的对象

在没有被证明之前,其他任何事情都应该被认为是真实的。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2015-04-09
      • 2011-07-01
      • 2013-08-17
      • 1970-01-01
      • 2021-07-15
      • 2011-02-02
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      相关资源
      最近更新 更多