None

S
sadscv
发布于

当我们调用一个函数时,会在栈空间(内存中的某片区域)建立一个栈框架(stack frame), 存储包括编译后的代码,和一些相关变量等数据。若这个函数是某个函数的子函数,栈空间还存有指定的返回地址。当函数执行完毕后,将结果返回相应地址,并释放该栈框架所占用内存。

闭包:

def make_printer(msg):
    def printer():
        print
        msg

    return printer

printer = make_printer('Foo!')
printer()

当我们调用make_printer时,先按规则建立好栈空间,执行其中代码,此时发现当前函数(make_printer)中有一个子函数(printer)引用了当前函数中local作用域下的本地变量。此时则在栈空间中新建一个栈框架,将其中的代码存入,并存入

参考资料:

namespace与scope详细:

http://python.jobbole.com/81367/

函数调用过程:

https://www.cs.ucsb.edu/~pconrad/cs8/topics.beta/theStack/06/

闭包的研究:nonlocal关键字及闭包初级分析。

http://linluxiang.iteye.com/blog/789946

http://blog.csdn.net/marty_fu/article/details/7679297

obj.closure____的内容,总结的很好但掩盖了全部细节:

http://stackoverflow.com/questions/14413946/what-exactly-is-contained-within-a-obj-closure

闭包实现的总结,比较精炼

http://www.cnblogs.com/hackerl/p/5985102.html

主要看CALL_FUNCTION一段。

http://eli.thegreenplace.net/2012/03/23/python-internals-how-callables-work/

函数调用源码分析,非常友好地展现了绝大部分过程,还是中文的,推荐指数5颗星。

http://www.jianshu.com/p/d00108741a18

细节细节,底层底层,看到这里已经是终点

http://python.jobbole.com/83545/

阅读 2 评论 0

评论区

登录后发表评论

暂无评论

成为第一个发表评论的人吧!