问题是关于流行的Pythonic功能。
a = True
b = True
print(all([a, b]))
为什么不使用*args
?所以它看起来像这样:
a = True
b = True
print(all(a, b))
列表在这里似乎是多余的 - 当我们能够将参数传递给* args。
时答案 0 :(得分:3)
all
适用于已有迭代的情况。如果您有两个单独的布尔值,那就是and
的工作:
print(a and b)
使all
取*args
而不是迭代会强制输入的实现,即使在早期返回False
结果的情况下,或者输入可迭代结果太多的情况下也是如此将所有这些元素保存在记忆中的元素。
from itertools import repeat
def starargs_all(*booleans):
return all(booleans)
print(all(repeat(False, 10**10))) # prints immediately
print(starargs_all(*repeat(False, 10**10))) # takes a while, uses lots of memory, awkward *
答案 1 :(得分:0)
因为all()
适用于 ANY 可迭代,不仅仅是列表。 E.g:
def makeGen():
i = 1
while i <= 10:
yield i
i = i + 1
all(makeGen())