相关疑难解决方法(0)

Python中对象的布尔值

我们知道,Python有对象的布尔值:如果一个类有一个__len__方法,它的每个实例__len__()都会返回0,它将被计算为一个布尔值False(例如,空列表).

实际上,每个可迭代的空自定义对象都被评估为False好像它出现在布尔表达式中.

现在假设我有一个foo属性类bar.我怎样才能定义它的真值,以便它会被评估True if bar % 2 == 0,False否则呢?

例如:

myfoo = foo()
myfoo.bar = 3
def a(myfoo):
    if foo:
        print "spam"
    else:
        print "eggs"
Run Code Online (Sandbox Code Playgroud)

所以,a(myfoo)应该打印"eggs".

python boolean

34
推荐指数
2
解决办法
2万
查看次数

比较是否真的允许返回数字而不是布尔值,为什么?

我在 Python 文档的真值测试下发现了一个令人惊讶的句子:

\n
\n

除非另有说明,具有布尔结果的运算和内置函数始终返回 0 或 False(表示 false)和 1 或 True(表示 true)。

\n
\n

关系运算符似乎没有例外语句,因此 IIUC 它们可以返回0and1而不是某些内置类型(例如 )的值上的Falseand ,甚至是不确定的。True7 < 3

\n

因此,为了满足我的代码生成类型值bool或防御性编程(只要这很重要)的规范要求,我应该将逻辑表达式包装在对 的调用中吗bool

\n

附加问题:为什么会有这个纬度?它是否使 CPython 或其他实现变得更容易?

\n

编辑\n问题已得到解答并且我已接受,但我想在PEP 285 \xe2\x80\x93 添加布尔类型中添加它,我发现了以下语句:

\n
    \n
  1. 所有概念上返回布尔结果的内置操作都将更改为返回 False 或 True,而不是 0 或 1;例如,比较、\xe2\x80\x9cnot\xe2\x80\x9d 运算符以及 isinstance() 等谓词。
  2. \n
  3. 所有定义为返回布尔结果的内置操作都将更改为返回 False 或 True,而不是 0 或 1。特别是,这会影响比较 (<、<=、==、!=、>、>=、 is, is not, in, not in),一元运算符 \xe2\x80\x98not\xe2\x80\x99,内置函数 callable()、hasattr()、isinstance() …

python types boolean type-conversion truthiness

3
推荐指数
1
解决办法
72
查看次数

标签 统计

boolean ×2

python ×2

truthiness ×1

type-conversion ×1

types ×1