有没有更好的方法在模块之间共享变量?

Is there a better way to share variables between modules?

我现在正在制作一个包,我希望人们可以直接调用这个包,所以我使用 setup.py 中的入口点。

现在我有 application.py,其中包含 main() 作为入口点。 这个 main() 函数中的变量被发送到 tex.py ,它帮助我生成乳胶报告。 (生成latex文件的方式来自于:Generating pdf-latex with python script

# application.py
def main():
    a = 123
    b = 456
    from tex import generate
    generate()

#tex.py
content = f'{a} is not equal to {b}'
def generate():
    with open('report.tex','w') as f:
        f.write(content)

但这会导致 alb 未定义。

我发现一种解决方案是使用 global 并添加 from application import * 但是因为我有几十个变量,它会太长。

我想知道是否有办法将变量共享到我的 Latex 生成器并保留此入口点功能。

提前致谢。

喜欢@juanpa.arrivilaga和@rv.kvetch建议为什么不直接传递参数?

# application.py
def main():
  a = 123
  b = 456
  from tex import generate
  generate(a, b)

#tex.py
def generate(a, b):
  content = f'{a} is not equal to {b}'
  with open('report.tex','w') as f:
    f.write(content)

或者如果你有很多变量,创建一个模型并传递它

class Model:
  __init__(a,b,c,d):
     self.a = a
     ....

    # application.py
def main():
  a = 123
  b = 456
  from tex import generate
  generate(Model(a,b))

#tex.py
def generate(model):
  content = f'{model.a} is not equal to {model.b}'
  with open('report.tex','w') as f:
    f.write(content)

更好的是你可以将打印逻辑添加到模型本身(使用一些相关的方法),有很多解决方案!

class Model:
   ...init
    def __str__(self):
      return '{} is not equal to {}'.format(self.a, self.b)

    def __repr__(self):
      return '{} is not equal to {}'.format(self.a, self.b)