python3 不同 py 文件如何共享变量?

2019-08-02 10:21:30 +08:00
 qw30716

a.py 中有两个变量通过 sys.argv 传进来的,我想实现类似 java 那种直接使用 static 方法保存下来(就是 b.py 保存),然后 c.py 调用 b.py 保存的这两个变量,但是我试了使用 @classmethod 和 @staticmethod 都无法实现不同 py 文件共享变量,不知道是哪里的原因,请各位大佬支招

5711 次点击
所在节点    Python
31 条回复
arrow8899
2019-08-02 10:25:02 +08:00
global 变量默认就是共享的
a.py
```
A_GLOBAL = 1
```

b.py
```
import .a
print(a.A_GLOBAL) # 1
```
qw30716
2019-08-02 10:27:01 +08:00
@arrow8899 我能不能 b.py 用 global 变量保存 a.py 传进来的变量,然后 c.py 调用?
leishi1313
2019-08-02 10:31:48 +08:00
@qw30716 那你为什么不直接 c 调 a ?我觉得你还是来个实际点的例子吧
leishi1313
2019-08-02 10:35:39 +08:00
要不你还是考虑来一个 config.py ,b 和 c 都直接读别从 arg 读了
qw30716
2019-08-02 10:41:14 +08:00
@leishi1313 肯定是需要从 arg 读的,因为这个值一直变
qw30716
2019-08-02 10:42:11 +08:00
@leishi1313 我本身以为 python 有类似 java 的 static 保存,但是搜索了一下,好像没有发现
andylsr
2019-08-02 10:43:29 +08:00
multiprocessing.queue
leishi1313
2019-08-02 10:44:18 +08:00
@qw30716 python 没 vm 能 static 到哪呢。这样子的话考虑 pickle 持久化到文件?
qw30716
2019-08-02 10:45:03 +08:00
@andylsr 多进程队列?
qw30716
2019-08-02 10:46:05 +08:00
@leishi1313 每次先写到文件,然后从文件读?这个作为最后考虑
ranleng
2019-08-02 10:48:06 +08:00
做单例?
写个 config 的 class,然后把变量保存进去,

等等.
为什么不直接让 a.py import b, 然后 b.save 保存..?
co3site
2019-08-02 10:50:17 +08:00
完全没看懂你的这公有变量传递的意义,调用过来调用过去最终只是为了一个保存吗?
qw30716
2019-08-02 10:56:29 +08:00
@co3site 最终是想在其他 py 文件中调用 传进来的值做其他功能
andylsr
2019-08-02 10:58:00 +08:00
@qw30716 官方文档里有代码,用 basemanager 注册一个 queue,监听一个端口,别的 py 从 queue 读数据就行了
co3site
2019-08-02 10:58:19 +08:00
@qw30716 那也没必要公有化啊,你定义一个函数 return 过去,另外一个 py 程序拿到不就行了吗?
qw30716
2019-08-02 10:58:58 +08:00
@ranleng
bu.py
aa =0
bb =0
au.py
import bu
bu.aa = 1
bu.bb =3
cu.py
import bu
print(bu.aa+bu.bb)的值都是 0
Huelse
2019-08-02 11:06:18 +08:00
比较规范的是写 get 和 set 函数,
而且推荐写成类,然后在一个 py 文件里调用即可
AlvaIM
2019-08-02 11:06:46 +08:00
楼狙, 你是 python a.py --arg=xxx 传入 然后 python c.py 去取乜?
XIVN1987
2019-08-02 11:10:02 +08:00
bu.py
aa =0
bb =0

au.py
import bu
bu.aa =1
bu.bb =3

cu.py
import au
print(au.aa+au.bb)

这样试下
lishunan246
2019-08-02 11:52:30 +08:00
跨进程用文件或者 SQLite

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/588425

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX