有没有更好的方法在模块之间共享变量?
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)
我现在正在制作一个包,我希望人们可以直接调用这个包,所以我使用 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)