Python递归时函数内变量无法引用的问题

2013-10-27 22:49:00 +08:00
 bearzx
hi各位好,
我今天写code的时候遇到一个问题,考虑以下代码:

def a():
def b():
if a != 0:
print a
a -= 1
b()
a = 100
b()

a()

运行的话就会报出a变量没有创建的错误。但是这样是不是说这种情况下在递归的内部函数里就不能去引用外部函数的变量了?那如果有这种需求的话就只能定义全局变量了么。。。

求大神们指导
3790 次点击
所在节点    Python
10 条回复
bearzx
2013-10-27 22:49:52 +08:00
我擦这缩进。。。
bearzx
2013-10-27 23:25:34 +08:00
貌似可以用python3的nonlocal解决。。。
mengzhuo
2013-10-27 23:27:29 +08:00
能用gist不……

Python的变量规则好像是是Local Closure Global Buildin

可以看看这个
http://stackoverflow.com/questions/4851463/python-closure-write-to-variable-in-parent-scope
bearzx
2013-10-28 00:15:48 +08:00
@bearzx v2ex可以用gist?
bearzx
2013-10-28 00:25:31 +08:00
@mengzhuo 很有帮助,谢谢~
est
2013-10-28 09:08:46 +08:00
a 又是变量又是函数?
bearzx
2013-10-28 09:22:40 +08:00
@est 没。。是我写的不清楚,可以把a函数里面的a是另一个东西
VYSE
2013-10-28 10:11:44 +08:00
把变量放在tuple或list里传
bearzx
2013-10-28 10:30:05 +08:00
@VYSE 嗯mengzhuo给的链接里用的是这么个方法,不过python3里面有一个nonlocal关键字也可以实现这个需求
roricon
2013-10-29 14:44:41 +08:00
为什么我先想到的是构造一个generator然后重构它的__sub__方法来实现……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/87098

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX