我对 Python 中的以下语句有疑问
if not x % y:
# do something
在一段代码中看到这一点并进行实验后,我发现如果模计算结果为零以外的任何值,它将跳过“做某事”代码。
我的问题是,是否有关于带有隐含条件的 If 和 If not 语句的一般规则,并且对于这样的 Python“技巧”有什么好的参考吗?
我为这个广泛的问题道歉,但是当我第一次看到它时,这让我陷入了困境。我想尽可能多地学习这些短手技巧!
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 程序员感到困惑,但您可以。
Python 中没有“隐含条件”之类的东西。有真值,也有假值。
这些是错误的:
None
''
, u''
, b''
, []
, ()
)、映射 ( {}
) 或集合 ( {,}
)__nonzero__()
方法返回 false 的对象除非另有证明,否则其他任何事情都应该被认为是真实的。
这种行为在 Python 中称为 Truthiness:http ://www.udacity.com/wiki/CS258%20Truthiness%20in%20Python