免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 17840 | 回复: 7
打印 上一主题 下一主题

关于跨模块的全局变量的使用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 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 * 所说的,直接导入本地,这样应该是可以的啊

论坛徽章:
0
2 [报告]
发表于 2007-05-31 18:48 |只看该作者

  1. from utils import *

  2. def modify(c,d):
  3.     global a
  4.     a=c
  5.     global b
  6.     b=d

  7. print a
  8. print b
  9. modify(5,6)

  10. print a
  11. print b
复制代码

论坛徽章:
0
3 [报告]
发表于 2007-05-31 19:21 |只看该作者
global几模块级的,不能跨模块使用。

论坛徽章:
0
4 [报告]
发表于 2007-05-31 21:28 |只看该作者
多谢modou兄,偶知道了

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


谢谢二位了

论坛徽章:
0
5 [报告]
发表于 2007-05-31 22:30 |只看该作者
你的想法是可以的。不过不要使用from xx import yy这种形式,而是使用import xx.然后就可以通过xx.yy来使用,然后xx.yy='abc'可以进行修改。这样都这样处理全局性的变量就可以共享的。也就是保持一个独立的namespace,这样python不会再次导入,从而实现共享。

论坛徽章:
0
6 [报告]
发表于 2007-06-01 12:24 |只看该作者
  1. #main.py

  2. import utils

  3. print utils.a
  4. print utils.b
  5. utils.modify(5,6)

  6. print utils.a
  7. print utils.b

  8. #utils.py

  9. a=1
  10. b=2

  11. def modify(c,d):
  12.     global a
  13.     a=c
  14.     global b
  15.     b=d
复制代码


我帮你试了非常ok
虽然不懂limodou说的“不会再次导入namespace ”,
但又学到一点东西

论坛徽章:
0
7 [报告]
发表于 2007-06-01 13:11 |只看该作者
意思就是说一个模块一般只会导入一次,比如你多次执行:

import a
import a
import a

但其实只有第一次会导入进来。如果真正想重新导入,那么可以在第一次import a之后,通过reload(a)再次导入。

论坛徽章:
0
8 [报告]
发表于 2007-06-04 21:09 |只看该作者
长见识了。有点持久层的味道。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP