python变量的作用域到底怎么理解怎么用呢?谢谢!

A页面:

B页面

在A页面中from b.py import *
为什么执行A页面的时候提示:global name 's1List' is not defined
求解答。。。

你可以 在 B页面 里面直接 调用 一下 函数
运行一下 ,你可以发现应该和 刚才 执行A 页面 报的是同样的错误;

这是 因为 在B 页面里面 并没有 s1List 这样一个数组

在运行A页面时,因为有了 from b import * ,python解释器就可以找的getS1和getS2这样的函数名;可以 在 import 之后 print dir() 来查看 当前作用域下可用的名字 ,可以看到 getS1 和getS2 都在其中

之所以 执行 A页面错误,是A页面调用 函数 getS1 时,在B页面中 执行 函数时找不到 s1List这个数组,因为在A 页面的那个 s1List 是不在 B页面的作用范围内的。追问

importB页面后,不是把B页面的代码块都拿过来吗?还是只是把函数拿过来?
我在A页面声明s1List也不行吗?而且我加global s1List也不行啊!

追答

怎么说呢。
import 是把 那个模块中的 名字(变量,函数等)添加到当前作用域中,不是简单的把代码块 复制过来这样~
至于你想的那样,至少我不知道该怎么做,一般像你在B页面里用到哪个变量,就在当前页面定义一下。想直接修改主页面里面的变量我是不太清楚该怎么做,看有高手指点下没。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-07
因为你没有在A页面中声明s1List是全局变量,但是在调用getS1时,却用到了s1List,所以会出现这样的错误。如果你在a中加入
global s1List,s2List
就不会出错了。追问

 

我加了也出错啊!

第2个回答  2012-08-11
首先要说的是global name 's1List' is not defined,是在import b的时候出现的错误,因为python的解释器会先将py文件生成pyc文件,b文件中没有声明s1list和s2list,肯定报错,你可以把这两个数组作为参数,def getS1(s,s1list)。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网