登录
首页精彩阅读Python函数 “大脑移植”
Python函数 “大脑移植”
2017-05-17
收藏

Python函数 “大脑移植”

当我们在Python里定义函数时发生了什么呢?

关键字def有两个功能:它可以创建一个函数对象,然后把这个函数对象赋值给一个变量(即我们的函数名)。所以,当我们编写:

Python创造了一个新的函数对象。在这个函数对象里,我们可以看到字节码,元数(也就是参数数量)和一些与函数相关的其他东西。

大多数这些东西存在于函数对象的__code__属性里。事实上,研究__code__是了解Python函数如何运行的最好办法。例如,函数foo的元数是由foo.__code__.co_argcount获得,而字码节存在于foo.__code__.co_code中。

__code__对象的属性是只读,但是__code__属性本身不是!我们可以来做个恶作剧,在函数里进行“大脑移植”:

现在,当我们运行foo()时,我们实际上运行的是被定义为bar的代码,然后我们会得到:

这可能不是你想要放进实际程序中的代码,但是它演示了__code__对象的一些功能。其实,去年我就发现,探索_code_对象是十分有趣的!数据分析师培训


数据分析咨询请扫描二维码

客服在线
立即咨询