51Arduino32 发表于 2022-1-17 21:13:50

多个python文件之间变量共享问题

本帖最后由 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 开始的, 如图二,来求助一下




以下是两个代码的内容:
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:29:54

我感觉难,你运行a,a是一个进程,同理b运行时是另一个进程
你要做到a访问正在运行b的变量,那要能做到进程之间的资源共享

isdkz 发表于 2022-1-17 21:31:01

这样是无法实现的吧,变量无非就是内存空间的名字,不同进程的内存是不能互访的,要想共享某些值就得通过进程通信的方式,使用网络IO或者文件IO

isdkz 发表于 2022-1-17 21:32:01

没拿到鱼币{:10_266:}

isdkz 发表于 2022-1-17 21:32:44

80概率很小吗?还是我太黑了{:10_243:}{:10_243:}

逃兵 发表于 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)

51Arduino32 发表于 2022-1-17 22:11:13

isdkz 发表于 2022-1-17 21:32
80概率很小吗?还是我太黑了

现在有了

阿奇_o 发表于 2022-1-17 22:13:38

先不说,为啥要分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

isdkz 发表于 2022-1-17 22:19:39

谢谢,谢谢大佬

51Arduino32 发表于 2022-1-17 22:47:22

谢谢大家的回答,非常感谢{:5_108:}

心驰神往 发表于 2022-1-18 08:07:36

{:5_109:}

ohhohh 发表于 2022-1-18 08:37:57

{:10_254:}

阿萨德按时 发表于 2022-1-18 08:39:14

{:10_256:}

hy2009090003 发表于 2022-1-18 09:00:24

{:10_281:}

村里小黑 发表于 2022-1-18 09:15:33

{:10_298:}

涟漪袅袅 发表于 2022-1-18 09:31:32

{:10_254:}

1molHF 发表于 2022-1-18 09:40:40

谢谢,谢谢大佬

hit396 发表于 2022-1-18 09:58:33

不会也能混鱼币的么{:10_266:}

1449620085 发表于 2022-1-18 10:50:29

{:10_254:}

1449620085 发表于 2022-1-18 10:50:59

{:10_257:}{:10_257:}{:10_257:}
页: [1] 2
查看完整版本: 多个python文件之间变量共享问题