我刚刚才知道有Truthy和Falsy在Python这是与正常不同的价值观True和False?
是否有人可以深入解释什么truthy和falsy值?
我应该在哪里使用它们?
truthy和True值以及falsy和False值之间有什么区别?
为什么这不是天真的预期?
class Foo(object):
def __init__(self):
self.bar = 3
def __bool__(self):
return self.bar > 10
foo = Foo()
if foo:
print 'x'
else:
print 'y'
Run Code Online (Sandbox Code Playgroud)
(输出是x)
我正在寻找f()某种类似于此的映射函数:
f(str) = ''
f(complex) = 0j
f(list) = []
Run Code Online (Sandbox Code Playgroud)
这意味着它返回一个类型的对象,该对象在转换为时被计算False为bool.
这样的功能存在吗?
我们知道,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".