您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

列表理解中的所有内容都在单独的范围内运行(基本上是作为一个函数),除了用于最左侧for循环的可迭代对象。您可以在字节码中看到这一点:

>>> def foo():
...     return [i for i in data]
... 
>>> dis.dis(foo)
  2           0 LOAD_CONST               1 (<code 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.__code__.co_consts[1])
  2           0 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推导或生成器表达式)都是局部变量,闭包或全局变量,而不是参数。

其他 2022/1/1 18:31:17 有456人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶