为什么Python中的'all'函数接收数组而不是*args?

2024-03-29 12:32:16 发布

您现在位置:Python中文网/ 问答频道 /正文

问题是关于流行的肾盂功能。你知道吗

a = True
b = True
print(all([a, b]))

为什么不使用*args?所以看起来是这样的:

a = True
b = True
print(all(a, b))

当我们能够将参数传递给*args时,这里的列表似乎是多余的。你知道吗


Tags: 功能true列表argsallprint肾盂
1条回答
网友
1楼 · 发布于 2024-03-29 12:32:16

all表示已经有iterable的情况。如果有两个单独的布尔值,那就是and的工作:

print(a and b)

使all采用*args而不是iterable将强制实现输入,即使在False结果可能提前返回的情况下,或者当输入iterable的元素太多而无法将所有元素都保存在内存中时也是如此。你知道吗

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 *
网友
2楼 · 发布于 2024-03-29 12:32:16

因为all()任何iterable一起工作,而不仅仅是列表。例如:

def makeGen():
   i = 1
   while i <= 10:
      yield i
      i = i + 1

all(makeGen())

相关问题 更多 >