鱼C论坛

 找回密码
 立即注册
查看: 2079|回复: 39

[已解决]多个python文件之间变量共享问题

[复制链接]
发表于 2022-1-17 21:13:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 51Arduino32 于 2022-1-17 22:10 编辑

鱼友们,如下图,我想在 a.py 里拿到 正在运行的 b.py 里的 count 变量值(先运行b.py,再运行a.py),有什么好方法吗, 我试过去掉 b.py 里的 if__name__=="__main__";  虽然这时候运行 a.py 拿到的count值不是0,但也不是 b.py 中的 count 值(也是先运行b.py,再运行a.py),他是重新 0 开始的, 如图二,来求助一下

图1

图1


图2

图2


以下是两个代码的内容:
a.py
# a.py
import b
import time
if __name__=="__main__":
    while 1:
        count = b.count # 获取b.py 里面的 count变量值
        print("count is {}".format(count))
        time.sleep(1)

b.py
# b.py
import a
import time
count = 0
class A:
    def __init__(self):
        self.count=0

    def add(self):
        global count
        self.count+=1

    def getCount(self):
        return self.count


if __name__=="__main__":
    s = A()
    while 1:
        s.add()
        count = s.getCount()
        print("count is {}".format(count))
        time.sleep(1)
最佳答案
2022-1-17 21:40:00
拿个文件存储一下
# a.py
import time
import pickle
if __name__=="__main__":
    while 1:
        count = pickle.load(open('count','rb')) # 获取b.py 里面的 count变量值
        print("count is {}".format(count))
        time.sleep(1)
# b.py
import time
import pickle
count = 0
class A:
    def __init__(self):
        self.count=0

    def add(self):
        global count
        self.count+=1

    def getCount(self):
        pickle.dump(self.count,open('count','wb'))
        return self.count

if __name__=="__main__":
    s = A()
    while 1:
        s.add()
        count = s.getCount()
        print("count is {}".format(count))
        time.sleep(1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-17 21:29:54 | 显示全部楼层

回帖奖励 +20 鱼币

我感觉难,你运行a,a是一个进程,同理b运行时是另一个进程
你要做到a访问正在运行b的变量,那要能做到进程之间的资源共享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 21:31:01 | 显示全部楼层
这样是无法实现的吧,变量无非就是内存空间的名字,不同进程的内存是不能互访的,要想共享某些值就得通过进程通信的方式,使用网络IO或者文件IO
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 21:32:01 | 显示全部楼层
没拿到鱼币
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 21:32:44 | 显示全部楼层
80概率很小吗?还是我太黑了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 21:40:00 | 显示全部楼层    本楼为最佳答案   
拿个文件存储一下
# a.py
import time
import pickle
if __name__=="__main__":
    while 1:
        count = pickle.load(open('count','rb')) # 获取b.py 里面的 count变量值
        print("count is {}".format(count))
        time.sleep(1)
# b.py
import time
import pickle
count = 0
class A:
    def __init__(self):
        self.count=0

    def add(self):
        global count
        self.count+=1

    def getCount(self):
        pickle.dump(self.count,open('count','wb'))
        return self.count

if __name__=="__main__":
    s = A()
    while 1:
        s.add()
        count = s.getCount()
        print("count is {}".format(count))
        time.sleep(1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-17 22:11:13 | 显示全部楼层
isdkz 发表于 2022-1-17 21:32
80概率很小吗?还是我太黑了

现在有了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 22:13:38 | 显示全部楼层

回帖奖励 +50 鱼币

先不说,为啥要分a,b 两个模块。 你要先练习一些基本的面向对象的小题目,先理解 类和实例,类变量、实例变量和方法 等基本概念呀。。
解决:
# a.py
import b
import time

if __name__ == "__main__":
    s = b.A()   # 使用(创建)b模块里的 A类的实例对象
    while 1:
        s.add()  
        count = s.getCount()   
        print("count is {}".format(count))
        time.sleep(1)

------------------------------
# b.py
class A:
    def __init__(self):
        self.count = 0

    def add(self):
        self.count += 1

    def getCount(self):
        return self.count

if __name__ == "__main__":
    pass
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-17 22:19:39 | 显示全部楼层

回帖奖励 +50 鱼币

谢谢,谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-17 22:47:22 | 显示全部楼层
谢谢大家的回答,非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-18 08:07:36 | 显示全部楼层

回帖奖励 +50 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-18 08:37:57 | 显示全部楼层

回帖奖励 +50 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-18 08:39:14 | 显示全部楼层

回帖奖励 +50 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-18 09:00:24 | 显示全部楼层

回帖奖励 +50 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-18 09:15:33 | 显示全部楼层

回帖奖励 +50 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-18 09:31:32 | 显示全部楼层

回帖奖励 +50 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-18 09:40:40 | 显示全部楼层

回帖奖励 +50 鱼币

谢谢,谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-18 09:58:33 | 显示全部楼层

回帖奖励 +50 鱼币

不会也能混鱼币的么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-18 10:50:29 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-18 10:50:59 | 显示全部楼层

回帖奖励 +50 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 13:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表