我对Python中的以下语句有疑问
if not x % y:
# do something
在一段代码中看到这个并进行实验后,我发现如果modulo评估为零,那么它将跳过“做某事”代码。
我的问题是,是否存在关于隐含条件的If和If语句的一般规则,是否有像这样的Python“技巧”的良好引用?
我为这个广泛的问题道歉,但是当我第一次看到它时,这让我陷入了困境。我想尽可能多地学习这些简单的技巧!
答案 0 :(得分: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程序员感到困惑,但你可以。
答案 1 :(得分:2)
Python中没有“隐含条件”这样的东西;有真正的价值观,而且有错误的价值观。
这些都是假的:
None
''
,u''
,b''
,[]
,()
),映射({}
)或集合({ {1}}){,}
方法除非另有证明,否则其他任何事情都应被视为真实。
答案 2 :(得分:1)
此行为在Python中称为“真实性”:http://www.udacity.com/wiki/CS258%20Truthiness%20in%20Python