夜猫的个人小站

       继续码起来

关于作者

微博北极熊硬糖
北京海淀区

Python闭包使用的缺陷相比于js或者scheme

标签   Python   sicp   js

累加器的实现

Python

    def foo(n):
        s=[0]
        def bar(i):

            s[0]=s[0]+i
            return s[0]
        return bar

     def foo(n):
        def bar(i):
            n=n+i
            return n+i
        return bar

js

     function foo(n){
        return function(i){
            n=n+i;
            return n;
        }
     }

scheme

    (define inc(init)
    (lambda (i) (begin (set! init (+ init i)) init))
    )   

python第二种方法会报错,local variable 'n' referenced before assignment 相对于js,和scheme来说,python用=赋值语句声明变量,所以n=n+i相当于另行声明了一个n与外部n无关,而右侧又引用了自己此时还未赋值,所以会报错。

参考 http://www.ruanyifeng.com/blog/computer/

问题出现的原因:

https://segmentfault.com/q/1010000004383698

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

最新评论

1楼
十五创建于2016年9月24日 03:51
嘿嘿嘿 嘿嘿嘿 嘿嘿嘿
收起
特么的不是选填吗2楼
十五创建于2016年9月24日 03:46
哇塞评论区居然支持markdown 如果对python失望可以看看ruby 我看了几个程序样例哈不错
  • stack
    回复十五于2016年9月24日 04:13
    过两天我就加上
    收起
收起
发表评论
回到顶部