分页: 1 / 1
作用域嵌套和LGB规则<求救>
发表于 : 2007-06-05 6:09
由 oxbat
代码: 全选
def outer(x):
def inner(i):
print i,
if i:inner(i-1)
inner(x)
outer(3)
按照书上写的这样的函数是不能运行的,解释是嵌套函数不是嵌套作用域..
嵌套的函数对自己的局部作用域,包含自己的模块的全局作用域以及内置的名字作用域有访问权,对包含自己的函数的作用域无访问权.
但是为什么在我这里 这段代码完全可以执行而没有任何错误
是书太古老了吗?还是新版本的python增加了这样的内容?
发表于 : 2007-06-05 6:12
由 oxbat
语法上没有问题 缩进被论坛消除了
发表于 : 2007-06-05 6:53
由 oxbat
困的不行了 没办法在线等了
希望看到此帖的仁兄给个解答 睡起来再继续
发表于 : 2007-06-06 5:16
由 laborer
鉴定结果:你看的是古籍。
发表于 : 2007-06-06 9:28
由 roylez
没问题阿,可以执行。
发表于 : 2007-06-08 3:35
由 oxbat
这本古籍还是不错的 呵呵
古籍所描述的想实现这样的根本不可能...
至少加深了我对这个问题的理解
个人见解
发表于 : 2007-07-06 7:32
由 richardfreeman
可能是inner绑定到了模块上,这样它既是局部的,又是全局的
Re: 个人见解
发表于 : 2007-07-06 7:54
由 richardfreeman
richardfreeman 写了:可能是inner绑定到了模块上,这样它既是局部的,又是全局的
我也是用的老书了 在2.1版中的嵌套作用域中 ,这种没定义在它所属的定义域的变量给了个名字叫自由变量,引用这种变量,使用与当前引用变量的代码块最近的且包含它的作用域。所以编译不报错。
3
发表于 : 2007-07-06 7:59
由 richardfreeman
记得加上这句,才能用这个新特性:
from __future__ import nested_scopes