PYTHON全局变量在模块中的无法引用?

Python/PHP/Perl 开发与设计
回复
sanz
帖子: 1009
注册时间: 2006-09-29 5:11
送出感谢: 11 次
接收感谢: 5 次

PYTHON全局变量在模块中的无法引用?

#1

帖子 sanz » 2011-06-29 9:58

我把main.py里所有的def、class都分类放在多个的xxx.py文件里,然后在main.py里import *
main.py里有全局变量a,本来所有东西在一个文件里的时候,a可以被随处引用。但是现在import进来的class里面,无法引用a。我只能再把这个全局变量a再给这些class。

有没有别的好方法来在import进来的class里引用全局变量?
以前在php里直接require进来,全局变量都是可见的。为什么现在全局变量不全局了?虽然class是import进来的,实例确实在main.py里创建的啊!而且报错是“全局变量a未定义",可是分明a就是全局变量啊。难道xxx.py里的全局变量就必须定义在xxx.py里面?
还有,这种把def,class都放在别的文件里,main.py里只放过程的做法是不是正确啊?

菜鸟,多谢指点!
Dell D620 -> Asus U44SG
Dapper->Edgy->Feisty->Gutsy->Hardy->Karmic->Lucid -> Oneric -> Precise->Trusty
Python+JS
sanz
帖子: 1009
注册时间: 2006-09-29 5:11
送出感谢: 11 次
接收感谢: 5 次

Re: PYTHON全局变量在模块中的无法引用?

#2

帖子 sanz » 2011-06-29 10:02

比如:

main.py
---------------------
a="asdf"
from res import *
cc=classA()
cc.func() #这里报错"全局变量a未定义"
-------------------------

res.py
------------------
class classA:
def func(self):
print a
----------------------
Dell D620 -> Asus U44SG
Dapper->Edgy->Feisty->Gutsy->Hardy->Karmic->Lucid -> Oneric -> Precise->Trusty
Python+JS
lubcat
帖子: 2061
注册时间: 2010-09-27 12:59
送出感谢: 0
接收感谢: 0

Re: PYTHON全局变量在模块中的无法引用?

#3

帖子 lubcat » 2011-06-29 10:42

又来坑蝶? :em04
生活里,有很多转瞬即逝,像在车站的告别,刚刚还相互拥抱,转眼已各自天涯。很多时候,你不懂,我也不懂,就这样,说着说着就变了,听着听着就倦了,看着看着就厌了,跟着跟着就慢了,走着走着就散了,爱着爱着就淡了,想着想着就算了。
lubcat
帖子: 2061
注册时间: 2010-09-27 12:59
送出感谢: 0
接收感谢: 0

Re: PYTHON全局变量在模块中的无法引用?

#4

帖子 lubcat » 2011-06-29 10:49

import这东西不是习惯放开头的?
生活里,有很多转瞬即逝,像在车站的告别,刚刚还相互拥抱,转眼已各自天涯。很多时候,你不懂,我也不懂,就这样,说着说着就变了,听着听着就倦了,看着看着就厌了,跟着跟着就慢了,走着走着就散了,爱着爱着就淡了,想着想着就算了。
sanz
帖子: 1009
注册时间: 2006-09-29 5:11
送出感谢: 11 次
接收感谢: 5 次

Re: PYTHON全局变量在模块中的无法引用?

#5

帖子 sanz » 2011-06-29 11:00

import 放在哪里似乎没有影响啊!我把他放在开头,还是一样的结果。而且我在res.py里加了global还是一样。

PS:一直不知道肯爹的确切含义,LS这么用一下,我更糊涂了。
Dell D620 -> Asus U44SG
Dapper->Edgy->Feisty->Gutsy->Hardy->Karmic->Lucid -> Oneric -> Precise->Trusty
Python+JS
lubcat
帖子: 2061
注册时间: 2010-09-27 12:59
送出感谢: 0
接收感谢: 0

Re: PYTHON全局变量在模块中的无法引用?

#6

帖子 lubcat » 2011-06-29 11:32

爹 #diē
  【释义】父亲:爹妈|爹娘。
窃以为 import在导入语句执行之前
导入的模块并没有生成该作用域
故主文件中的所有对应的使用会出现错误


另外。整个包中的主要的大类
是不是直接写道main.py中好点呢。
生活里,有很多转瞬即逝,像在车站的告别,刚刚还相互拥抱,转眼已各自天涯。很多时候,你不懂,我也不懂,就这样,说着说着就变了,听着听着就倦了,看着看着就厌了,跟着跟着就慢了,走着走着就散了,爱着爱着就淡了,想着想着就算了。
头像
jarlyyn
论坛版主
帖子: 4671
注册时间: 2006-04-12 18:54
送出感谢: 0
接收感谢: 7 次
联系:

Re: PYTHON全局变量在模块中的无法引用?

#7

帖子 jarlyyn » 2011-06-29 14:36

我为了不要这样抛弃了lua,楼主居然要这样做…………
这样写程序倒一定规模后会进入调试地狱的,看到一个个变量不知道在哪里定义
给楼主一个我个人的建议

专门建议建立一个文件存放变量,比如conf

然后在需要的模块里

from conf import xxx xxxx xxxxxx

个人觉得这样可能会比较好点。

个人经验,非标准解决方案
sanz
帖子: 1009
注册时间: 2006-09-29 5:11
送出感谢: 11 次
接收感谢: 5 次

Re: PYTHON全局变量在模块中的无法引用?

#8

帖子 sanz » 2011-06-29 15:54

谢谢楼上的建议。
我主要是想把那些class单独出来便于以后直接用。这样以后新的项目直接改主文件和配置文件就可以了。

不过这样还是有全局变量作用域的问题啊
Dell D620 -> Asus U44SG
Dapper->Edgy->Feisty->Gutsy->Hardy->Karmic->Lucid -> Oneric -> Precise->Trusty
Python+JS
sanz
帖子: 1009
注册时间: 2006-09-29 5:11
送出感谢: 11 次
接收感谢: 5 次

Re: PYTHON全局变量在模块中的无法引用?

#9

帖子 sanz » 2011-06-29 15:57

忘了说了,我是web服务器里的网页输出。
Dell D620 -> Asus U44SG
Dapper->Edgy->Feisty->Gutsy->Hardy->Karmic->Lucid -> Oneric -> Precise->Trusty
Python+JS
jtshs256
论坛版主
帖子: 22322
注册时间: 2010-07-19 21:41
系统: OS X
送出感谢: 2 次
接收感谢: 27 次

Re: PYTHON全局变量在模块中的无法引用?

#10

帖子 jtshs256 » 2011-06-29 16:33

__builtin__
NO DO NO DIE
http://a/%%30%30
头像
jarlyyn
论坛版主
帖子: 4671
注册时间: 2006-04-12 18:54
送出感谢: 0
接收感谢: 7 次
联系:

Re: PYTHON全局变量在模块中的无法引用?

#11

帖子 jarlyyn » 2011-06-29 16:35

sanz 写了:谢谢楼上的建议。
我主要是想把那些class单独出来便于以后直接用。这样以后新的项目直接改主文件和配置文件就可以了。

不过这样还是有全局变量作用域的问题啊
为什么一定要不带命名空间的全局变量呢?
头像
ee.zsy
帖子: 41
注册时间: 2010-05-09 16:10
来自: 微风的河岸
送出感谢: 4 次
接收感谢: 0
联系:

Re: PYTHON全局变量在模块中的无法引用?

#12

帖子 ee.zsy » 2011-06-30 3:05

2L在res.py里面把main给import进来就可以了(main.py里面习惯写为“if __name__=="main":...”),不然那个print一旦执行到肯定抛错误。Python里面全局变量所谓的全局是针对在一个文件里面的函数而言的,跨文件就等于定义在不同的包里面,也就相当于是使用了不同的命名空间。
sanz
帖子: 1009
注册时间: 2006-09-29 5:11
送出感谢: 11 次
接收感谢: 5 次

Re: PYTHON全局变量在模块中的无法引用?

#13

帖子 sanz » 2011-06-30 11:17

ee.zsy 写了:Python里面全局变量所谓的全局是针对在一个文件里面的函数而言的,跨文件就等于定义在不同的包里面,也就相当于是使用了不同的命名空间。

:em11正是正是,我已经发现了我这个概念的错误了。我以为import和php的require 差不多呢。

结贴。
Dell D620 -> Asus U44SG
Dapper->Edgy->Feisty->Gutsy->Hardy->Karmic->Lucid -> Oneric -> Precise->Trusty
Python+JS
头像
lilydjwg
论坛版主
帖子: 4164
注册时间: 2009-04-11 23:46
系统: Arch Linux
送出感谢: 11 次
接收感谢: 127 次
联系:

Re: PYTHON全局变量在模块中的无法引用?

#14

帖子 lilydjwg » 2011-07-01 15:37

sanz 写了:
ee.zsy 写了:Python里面全局变量所谓的全局是针对在一个文件里面的函数而言的,跨文件就等于定义在不同的包里面,也就相当于是使用了不同的命名空间。

:em11正是正是,我已经发现了我这个概念的错误了。我以为import和php的require 差不多呢。

结贴。
你可以忽略 Python 官方的警告,使用

代码: 全选

from xxx import *
回复

回到 “Python/Php/Perl”