您好,匿名用户
随意问技术百科期待您的加入

大家怎么用Python 2.x 实现闭包?

0 投票

大家怎么用Python 2.x 实现闭包?

用户头像 提问 2013年 11月1日 @ Tryndamere 上等兵 (325 威望)
分享到:

1个回答

0 投票
 
最佳答案

问题的主要原因在于:
在Python中string, int, float, tuple这些基本类型都是immutable的。即使是如int, float这种"基础"类型,若值不同,会赋值给另外一个PyObject,这点与lua, javascript等语言不一样。

你可以在Python REPL中测试这几行:

i = 1
id(i)
i = 2  # 改变i的值
id(i)  # 注意两个id不同

这就是为什么需要使用list, dict的原因(class, function本身也是dict,可以利用上来)。
就你的例子来说,也可以这样写:

def counter():
    i = 0
    def inner():
        inner.i += 1
        return inner.i
    inner.i = i
    return inner

c1 = counter()
c2 = counter()

print c1()
print c1()
print c2()
print c2()
用户头像 回复 2013年 10月4日 @ Rengar 上等兵 (236 威望)
选中 2013年 9月7日 @Tryndamere
提一个问题:

相关问题

+1 投票
1 回复 108 阅读
用户头像 提问 2012年 12月1日 @ Ziggs 上等兵 (345 威望)
0 投票
1 回复 40 阅读
用户头像 提问 2013年 10月25日 @ Shen 上等兵 (318 威望)
0 投票
1 回复 38 阅读
用户头像 提问 2013年 10月14日 @ 坑爹 上等兵 (128 威望)
0 投票
1 回复 38 阅读
用户头像 提问 2013年 10月14日 @ Nami 列兵 (71 威望)
+1 投票
1 回复 45 阅读
用户头像 提问 2012年 12月1日 @ Annie 上等兵 (299 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...