分页: 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