Python--生成器表达式的嵌套 g = (n for n in ls if n in ls)
我们知道,Python的生成式表达式是这样的:
generator_1 = (i for i in range(10))
如果我将生成式表达式进行嵌套,然后再使用这个生成器的时候做点小动作:
ls = [1, 2, 3, 4, 5]
g = (n for n in ls if n in ls)
ls = [0, 1, 2]
result = list(g)
点击查看结果
[1, 2]
结果解析:Python从2.4开始就对生成器嵌套做了一些规定,我们查询 PEP 289 – Generator Expressions
有这么一个规定:
Only the outermost for-expression is evaluated immediately, the other expressions are deferred until the generator is run:
g = (tgtexp for var1 in exp1 if exp2 for var2 in exp3 if exp4)
is equivalent to:
def __gen(bound_exp):
for var1 in bound_exp:
if exp2:
for var2 in exp3:
if exp4:
yield tgtexp
g = __gen(iter(exp1))
del __gen
也就是说:
只有最外层的forloop循环才会在生成生成器的时候就立即计算,而其他的只会在生成器运行时候再计算运行
所以结果就很明显了,g = (n for n in ls if n in ls)
中for n in ls
在生成器产生时候就会计算运行,此时ls = [1, 2, 3, 4, 5]
而最后在使用这个生成器g的时候,ls = [0, 1, 2]
,后面的if n in ls
的ls
就是最后的[0, 1, 2]
了
请相信自己
当我们迷茫,懒惰,退缩的时候 我们会格外的相信命运 相信一切都是命中注定
而当我们努力拼搏,积极向上时 我们会格外的相信自己
所以命运是什么呢? 它是如果你习惯它 那它就会一直左右你
如果你想挣脱它 那它就成为你的阻碍 可如果你打破了它 那它就是你人生的垫脚石!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!