python中def中def是如何实现的?

比如这段代码 [图片] 每次调用f,内部的函数都会重新覆盖定义一遍吗?这岂不是要慢很多?不嵌套定义会显得很难看,有什么好的方法吗? 另外python绝…
关注者
35
被浏览
56,185

7 个回答

这要看你怎么理解“定义”

其实py的作法是:

先编译整段代码,每个函数的代码部分弄成一个code对象

然后执行def这句的时候,把code对象和当时一些信息打包一个func对象,赋值给f1code对象是唯一的,但func对象是实时生成的

请看cpython的源码

函数在编译的时候就会被编译为pyfunc对象

然后储存在常量池

重新定义只是执行字节码

LOAD_CONST x('<function at xxx>')

WRITE_NAME x(name'xxx')

而已


更正: