分享

Python函数 “大脑移植”

 石头p4g54puvpz 2017-05-25

  当我们在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/
译者:斯特


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多