当我们在Python里定义函数时发生了什么呢? 关键字def有两个功能:它可以创建一个函数对象,然后把这个函数对象赋值给一个变量(即我们的函数名)。所以,当我们编写: Python创造了一个新的函数对象。在这个函数对象里,我们可以看到字节码,元数(也就是参数数量)和一些与函数相关的其他东西。 大多数这些东西存在于函数对象的__code__属性里。事实上,研究__code__是了解Python函数如何运行的最好办法。例如,函数foo的元数是由foo.__code__.co_argcount获得,而字码节存在于foo.__code__.co_code中。 __code__对象的属性是只读,但是__code__属性本身不是!我们可以来做个恶作剧,在函数里进行“大脑移植”: 现在,当我们运行foo()时,我们实际上运行的是被定义为bar的代码,然后我们会得到: 这可能不是你想要放进实际程序中的代码,但是它演示了__code__对象的一些功能。其实,去年我就发现,探索_code_对象是十分有趣的! 英文原文:http://blog./python-function-brain-transplants/ |
|
来自: 石头p4g54puvpz > 《python》