【发布时间】:2021-12-08 02:41:40
【问题描述】:
我的一个朋友问我这段代码:
array = [1, 8, 15]
gen = (x for x in array if array.count(x) > 0)
array = [2, 8, 22]
print(list(gen))
输出:
[8]
其他元素去哪了?
【问题讨论】:
-
理论:生成器表达式被计算到
for x in array但在创建时不会进一步,然后array被重新定义, 然后在新数组上评估count检查。 -
非常有趣的问题。我很惊讶重新定义
array会对gen产生影响。可能会导致非常难以发现的错误。 -
@tobias_k 这显然是正确的,正如第二个阵列上的实验所显示的那样
-
虽然这是重复的,但我相信这是一个非常有价值的路标,基于显着不同的标题(出于 SEO 目的)以及此处提供的解释与重复目标的差异。它在不到一周的时间内就获得了如此高的分数,这也说明了这一点(比欺骗目标在 3 年后获得的分数更高)。