关于跨模块的全局变量的使用

关于跨模块的全局变量的使用

大家都知道这样使用全局变量是可以滴
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 * 所说的,直接导入本地,这样应该是可以的啊


[Copy to clipboard] [ - ]
CODE:
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

global几模块级的,不能跨模块使用。
多谢modou兄,偶知道了

回niexining
其实我是不想这样用的,我是想把变量和函数都放到另外一个文件中去的
其实我的实际情况是这样的
我有两个脚本,需要的参数几乎一样的,在文件的开始我定义了这些变量的初时值,下面用getopt来获取参数,然后改这些值,结果好大一段都是一样的,我就想写成函数(getopt部分),如果可以像我说的那样,我把这些初时变量和函数放到另外一个utils.py中,在这边只掉一下函数就可以了,现在我只能把初时变量传进去,在把改过的传出来,我有十几个变量,比较麻烦,又想公用,所以就有了这样的想法.


谢谢二位了
你的想法是可以的。不过不要使用from xx import yy这种形式,而是使用import xx.然后就可以通过xx.yy来使用,然后xx.yy='abc'可以进行修改。这样都这样处理全局性的变量就可以共享的。也就是保持一个独立的namespace,这样python不会再次导入,从而实现共享。


[Copy to clipboard] [ - ]
CODE:
#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 ”,
但又学到一点东西
意思就是说一个模块一般只会导入一次,比如你多次执行:

import a
import a
import a

但其实只有第一次会导入进来。如果真正想重新导入,那么可以在第一次import a之后,通过reload(a)再次导入。
长见识了。有点持久层的味道。