python - 如何理解Python中all()函数中的取模?

标签 python iterator boolean generator modulo

我知道Python中的模%意味着得到余数,例如:

print 6 % 4            # 2, because 6 = 1 * 4 + 2
print 4 % 2            # 0, because 4 = 2 * 2 + 0

我还了解到 all() 函数就像通用量化,如果所有命题都为 True,则返回 True,并且它的参数应该是一个可迭代的。

my_list = [True, True, True, True]
print all(my_list)                    # True

但是我一直无法理解以下代码:

test_num = [3,6,9]

print all (11 % i for i in test_num)        # True

for unknown in (11 % i for i in test_num):
    print unknown, type(unknown)            # 2 <type 'int'>
                                            # 5 <type 'int'>
                                            # 2 <type 'int'>

那么,为什么我可以从所有项都是整数的iterable中得到True值呢?

谢谢!

最佳答案

如果您在 boolean 上下文中获取整数(例如在条件中,或通过 bool 显式获取),它将返回该整数是否非零:

>>> bool(0)
False
>>> bool(43)
True

让我们看一下代码:

(11 % i for i in test_num) 是一个生成器,可展开为 11 % 311 % 611 % 9,变为 252。由于它们均非零,因此 all 返回 True

实际上,当且仅当 11 既不能被 3、6 也不能被 9 整除时,这才返回 True

关于python - 如何理解Python中all()函数中的取模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35106409/

相关文章:

python - 使用 Arduino 查找咖啡机上 LED 的状态?

python - 如何转义格式字符串?

java - (java) 无法应用迭代器中的删除

Java - 如果未选择 ButtonGroup1,则显示消息框

c# - 如何将 bool 转换为 int?

python - 无法在python中读取简单的txt文件

python - 安装后无法启动pritunl

java - Iterator.hasNext() 似乎不会对列表中的最后一项返回 false

STL 容器上的 C++ 模板函数

javascript - 为什么这段代码没有按预期工作?