【发布时间】:2020-01-05 12:28:01
【问题描述】:
第一个代码:
for i in range(2,4):
q = i
print(list(q+j for j in range(q)))
返回: [2,3] [3,4,5]
但是第二个代码:
zzz=[]
for i in range(2,4):
q = i
zzz.append(q+j for j in range(q))
for i in zzz:
print(list(i))
返回: [3,4] [3,4,5]
为什么结果不同? 如何使迭代器将 q 值保留在内部(在第二个代码中)? 谢谢
【问题讨论】:
-
让迭代器把q值保留在里面是什么意思?
-
你真正想要达到什么目的?你想得到什么输出?
-
请尝试 res=[(q+j) for j in range(q)]
-
这是不同的,因为 Python 闭包是后期绑定,但很难说在这种抽象上下文中最好的解决方案是什么。
-
我想我明白你在说什么。如果您在同一个脚本上按顺序执行所有代码(两者),则在第一个循环完成后,
q的最后一个值将是3。q将保持定义,除非您在第二个循环开始之前del q。换句话说,您在问为什么q不是每个for循环内的local变量,对吧?