Chinaunix
标题:
关于跨模块的全局变量的使用
[打印本页]
作者:
chrisyan
时间:
2007-05-31 17:39
标题:
关于跨模块的全局变量的使用
大家都知道这样使用全局变量是可以滴
a=1
def m(b):
global a
a=b
m(2)
print a
这样a就变成2了.
但是现在我是这样的,我的变量和函数定义在另外一个文件中(utils.py),我在主控脚本(main.py)中调用 比如:
main.py:
from utils import *
print a
print b
modify(5,6)
print a
print b
utils.py:
a=1
b=2
def modify(c,d):
global a
a=c
global b
b=d
这样怎么就不行了呢?
有没有人知道啊,如果像from ... import * 所说的,直接导入本地,这样应该是可以的啊
作者:
niexining
时间:
2007-05-31 18:48
from utils import *
def modify(c,d):
global a
a=c
global b
b=d
print a
print b
modify(5,6)
print a
print b
复制代码
作者:
limodou
时间:
2007-05-31 19:21
global几模块级的,不能跨模块使用。
作者:
chrisyan
时间:
2007-05-31 21:28
多谢modou兄,偶知道了
回niexining
其实我是不想这样用的,我是想把变量和函数都放到另外一个文件中去的
其实我的实际情况是这样的
我有两个脚本,需要的参数几乎一样的,在文件的开始我定义了这些变量的初时值,下面用getopt来获取参数,然后改这些值,结果好大一段都是一样的,我就想写成函数(getopt部分),如果可以像我说的那样,我把这些初时变量和函数放到另外一个utils.py中,在这边只掉一下函数就可以了,现在我只能把初时变量传进去,在把改过的传出来,我有十几个变量,比较麻烦,又想公用,所以就有了这样的想法.
谢谢二位了
作者:
limodou
时间:
2007-05-31 22:30
你的想法是可以的。不过不要使用from xx import yy这种形式,而是使用import xx.然后就可以通过xx.yy来使用,然后xx.yy='abc'可以进行修改。这样都这样处理全局性的变量就可以共享的。也就是保持一个独立的namespace,这样python不会再次导入,从而实现共享。
作者:
niexining
时间:
2007-06-01 12:24
#main.py
import utils
print utils.a
print utils.b
utils.modify(5,6)
print utils.a
print utils.b
#utils.py
a=1
b=2
def modify(c,d):
global a
a=c
global b
b=d
复制代码
我帮你试了非常ok
虽然不懂limodou说的“不会再次导入namespace ”,
但又学到一点东西
作者:
limodou
时间:
2007-06-01 13:11
意思就是说一个模块一般只会导入一次,比如你多次执行:
import a
import a
import a
但其实只有第一次会导入进来。如果真正想重新导入,那么可以在第一次import a之后,通过reload(a)再次导入。
作者:
yeqiufeng
时间:
2007-06-04 21:09
长见识了。有点持久层的味道。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2