关于Python 中嵌套函数的作用域问题

bzwm 2009-03-13 10:37:51
看 Python 入门 一书,
有一个例子,

def outer( x ):
def inner( i ): #在outer局部赋值
print i
if i : inner(i - 1)
inner( x )

outer(3)

书上的意思是:这段代码不会工作。
解释是:在inner函数的内部,名字inner是不可见的。
因为inner没有对outer作用域的访问权限,所以从inner到inner的访问是失败的,而且会抛出一个异常。


但我实际运行时,可以正常工作。

我用的是Python2.6。

是不是我看的书太旧了,而现在Python已经对这块内容做了修改了?

望指教!
...全文
294 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bzwm 2009-03-14
  • 打赏
  • 举报
回复
好。
我已经换了。
Python核心编程。
谢谢你。
结贴了。
bzwm 2009-03-13
  • 打赏
  • 举报
回复
Python语言入门
O'reilly
中国电力出版社
P140

我写的就已经是完整代码了。

然后书上给了解决办法


def outer( x ):
global inner #声明为全局
def inner( i ):
print i
if i : inner(i - 1)
inner( x )

outer(3)


看这个解决方案,也就是说 inner(i - 1)的调用是非法的。

但在我的环境下运行正常。

这本书很早了,1999年O'reilly出版的。
所以我怀疑技术有变,书太旧。

特来求证!
iambic 2009-03-13
  • 打赏
  • 举报
回复
你看的是什么书?第几章第几节?最好贴完整的内容出来。或许是理解错误。我用的内部函数,好像一半以上都是这种递归式的,没理由不合法。
iambic 2009-03-13
  • 打赏
  • 举报
回复
1.5?汗,太旧了吧……
我手头这本是第二版,使用的Python版本是2.3,没找到你说的那个地方。如果你没理解错,那可能真是太旧了,建议你换一本吧?
bzwm 2009-03-13
  • 打赏
  • 举报
回复
是中文版的。

这本书讲的应该是1.5的。
在第四章快结束的时候。

我想应该是有变化吧。

毕竟现在都有 3.x 了。
iambic 2009-03-13
  • 打赏
  • 举报
回复
我倒是可以回家看看。你这个书是中文版还是英文版?是原书第几版?说下第几章第几节吧,这样查的时候方便些。

37,718

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧