gpt4 book ai didi

python - 条件语句中带有类变量的列表和生成器理解

转载 作者:太空宇宙 更新时间:2023-11-04 05:43:26 25 4
gpt4 key购买 nike

<分区>

考虑以下代码片段:

class C(object):
a = 0
b = 1
seq = [1, 2, 4, 16, 17]
list_comp = [a if v%2 else b for v in seq]
gen_comp = (a if v%2 else b for v in seq)

上面的代码解释得很好。打印绑定(bind)到类变量的对象会导致:

print C.list_comp  #  [0, 1, 1, 1, 0]
print C.gen_comp # <generator object <genexpr> at ...>

可悲的部分是 - 尝试从生成器中检索值导致 NameError:

next(C.gen_comp)  # NameError: global name 'a' is not defined

预期的行为应该类似于列表理解 - 它应该产生 5 个值并在每个下一个 next() 调用时引发 StopIteration

这里有什么不同?在每种情况下如何解析名称以及为什么会出现差异?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com