栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python:是否在列表理解中对split函数进行了多次评估?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python:是否在列表理解中对split函数进行了多次评估?

对于每个元素,列表推导中左侧的表达式将重新评估,是的。

如果只需要对它进行一次评估,则需要完全按照自己的意愿进行;首先调用它,并将结果存储在列表推导中。

列表显示 文档:

在这种情况下,新列表的元素是通过将每个

for
or
if
子句视为一个块,从左到右嵌套,
并在每次到达最里面的块时评估表达式以产生一个列表元素而生成的元素

强调我的。

您还可以使用

dis.dis()
函数反汇编列表理解:

>>> import dis>>> dis.dis(compile('[line.split()[i] for i in indexes]', '', 'eval'))  10 BUILD_LIST    0   3 LOAD_NAME     0 (indexes)   6 GET_ITER         >>    7 FOR_ITER     22 (to 32)  10 STORE_NAME    1 (i)  13 LOAD_NAME     2 (line)  16 LOAD_ATTR     3 (split)  19 CALL_FUNCTION 0  22 LOAD_NAME     1 (i)  25 BINARY_SUBSCR         26 LIST_APPEND   2  29 JUMP_ABSOLUTE 7        >>   32 RETURN_VALUE

FOR_ITER
操作码开始循环(与
JUMP_ABSOLUTE
关闭它),每一次一个
LOAD_NAME line
LOAD_ATTRsplit
CALL_FUNCTION
被执行。换句话说,字节码13到19实现了该
line.split()
部分,并且每次通过循环执行,该循环从字节码7到29运行。

(Python
3注意:列表推导具有其自身的作用域,您需要从外部代码对象常量中提取代码对象;

dis.dis(compile('[line.split()[i] for iin indexes]', '', 'eval').co_consts[0])
)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/648352.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号