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

Python内部函数是否已编译?

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

Python内部函数是否已编译?

给出一般说明-假设您在模块中具有以下代码:

def outer(x=1):    def inner(y=2):        return x+y

当文件通过python通过python解析时

compile()
,上面的文本将转换为字节码以说明如何执行 模块
。在模块字节码中,有两个“代码对象”,一个用于字节码,
outer()
一个用于字节码
inner()
。请注意,我说的是代码对象,而不是函数-
代码对象包含的内容仅比函数使用的字节码少,并且包含在编译时可能知道的任何信息-例如
outer()
包含对的字节码的引用的字节码
inner()


当模块实际加载时,通过评估与模块关联的代码对象,会发生的事情是为创建了一个实际的“功能对象”

outer()
,并将其存储在模块的
outer
属性中。函数对象充当字节码和调用该函数所需的所有上下文相关的东西(例如,应从哪个全局指令中提取等)的集合,而这些在编译时是未知的。在某种程度上,代码对象是函数的模板,该函数是用于在填充所有变量的情况下执行实际字节码的模板。

所有这些都

inner()
还不涉及-作为函数-每次您真正开始调用时
outer()
,即
inner()
为外部调用
创建一个新的函数对象,该对象将已经创建的内部字节码对象绑定到全局列表,包括
x
传递给该外部调用的as的值。可以想象,这非常快,因为不需要解析,只需使用一些指向其他已经存在的对象的指针来填充快速结构。



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

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

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