我在lambda函数中看到了modulo运算符的这种用法,用于测试primality。有人可以解释为什么只要i大于x就会执行以下语句,如果这不是我所知道的实际布尔语句。如果分子大于分母,无论它们是否是因子,它也适用于除法。
if x % i:
# Execute random foolishness
注意:我只在Python和Java中试过这个,所以如果这个用另一种语言工作,我很抱歉,因为它可能不是特定于语言的问题。
答案 0 :(得分:4)
Python将非零值视为True,因此if x % i:
与if x % i != 0:
相同。它只是一种快速测试x
是否可以被i
整除的方法。
答案 1 :(得分:2)
对于数字对象,python假定每个非零值为True
,零为假,因此条件if x % i:
将为真,直到x
不能被i
整除,否则它将是False
。
>>> bool(-1)
True
>>> bool(3)
True
>>> bool(0)
False
对于列表或字符串等其他对象也有这样的标准,如果你有一个空列表或字符串,python会将其评估为False,而对于其他情况,它将为True。
>>> bool(0)
False
>>> bool([])
False
>>> bool('')
False
>>> bool('a')
True
>>> bool([1])
True
>>> bool([''])
True
实际上是Truth value testing:
可以测试任何对象的真值,用于if或while条件或下面布尔运算的操作数。以下值被视为false:
无
假
任何数字类型的零,例如0,0.0,0j。
任何空序列,例如'',(),[]。
任何空映射,例如{}。
用户定义类的实例,如果类定义了
__bool__()
或__len__()
方法,则该方法返回整数零或bool值False。所有其他值都被认为是真的 - 因此许多类型的对象始终为真。
答案 2 :(得分:0)
该陈述是以以下形式浓缩的:
if x % i != 0
只要模数不为零,就会执行此if
。如果某个数字可以被i
整除,则不会执行if
数据块。