为什么列表理解中没有定义一个类变量,而另一个却是?

为什么列表理解中没有定义一个类变量,而另一个却是?,第1张

为什么列表理解中没有定义一个类变量,而另一个却是?

data
是列表理解的 来源 ;它是传递给创建的嵌套作用域的一个参数

列表理解中的所有内容都在单独的范围内运行(基本上是作为一个函数),除了用于最左侧

for
循环的可迭代对象。您可以在字节码中看到这一点:

>>> def foo():...     return [i for i in data]... >>> dis.dis(foo)  20 LOAD_ConST    1 (<pre object <listcomp> at 0x105390390, file "<stdin>", line 2>)   3 LOAD_ConST    2 ('foo.<locals>.<listcomp>')   6 MAKE_FUNCTION 0   9 LOAD_GLOBAL   0 (data)  12 GET_ITER  13 CALL_FUNCTION 1 (1 positional, 0 keyword pair)  16 RETURN_VALUE

<listcomp>
代码对象被称为像的功能,以及
iter(data)
作为参数(在被传递
CALL_FUNCTION
与1个位置参数,执行的
GET_ITER
结果)。

<listcomp>
代码对象将查找一个参数:

>>> dis.dis(foo.__pre__.co_consts[1])  20 BUILD_LIST    0   3 LOAD_FAST     0 (.0)        >>    6 FOR_ITER     12 (to 21)   9 STORE_FAST    1 (i)  12 LOAD_FAST     1 (i)  15 LIST_APPEND   2  18 JUMP_ABSOLUTE 6        >>   21 RETURN_VALUE

LOAD_FAST
调用引用传入的第一个也是唯一的位置参数。它在这里未命名,因为从未有函数定义为其命名。

列表推导中使用的任何其他名称(或set或dict推导或生成器表达式)都是局部变量,闭包或全局变量,而不是参数。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5601692.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存