我知道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值?
谢谢!
答案 0 :(得分:3)
如果在布尔上下文中取整数(例如在条件中,或通过bool
明确表示),则返回整数是否为非零:
>>> bool(0)
False
>>> bool(43)
True
让我们看一下代码:
(11 % i for i in test_num)
是一个展开到11 % 3
,11 % 6
和11 % 9
的生成器,转向2
,5
和{ {1}}。由于它们全部为非零,2
会返回all
。
实际上,当且仅当11不能被3,6和9整除时,这将返回True
。
答案 1 :(得分:1)
除0以外的任何内容都视为真。由于test_num
中没有0,all(test_num)
将返回true。
试试这个:
>>> test_num = [2,3,0]
>>> print all(test_num)
False
将相同的逻辑应用于for循环,您将得到答案。
答案 2 :(得分:1)
你看过帮助(全部)吗?
Help on built-in function all in module __builtin__:
all(...)
all(iterable) -> bool
Return True if bool(x) is True for all values x in the iterable.
If the iterable is empty, return True.
all()正在处理Boolean并返回一个布尔值。所以你的整数被转换为布尔值,这意味着任何非零值都返回True。因此,如果任何模数返回0,您将获得False,否则您将获得True。
>>> print all([False,True])
False
>>> print all([True,False])
False
>>> print all([True,True])
True