为了初始化 Python 程序中的一些变量(以结构化方式,不使用 OOP),我想使用一个名为initial()的函数,它是从main()函数调用的。问题是这些变量的范围,因为如果我在 initial ()函数中给它们初始值,尝试在main()函数中使用它们会产生错误,因为它们在那里不存在。例如:
import serial
def inicializacion():
puerto = '/dev/ttyACM0'
baudRate = 115200
buffer = ''
ser = serial.Serial(puerto, baudRate, timeout=1)
def main():
inicializacion()
buffer = buffer + leerDatos(ser)
有哪些替代方法可以避免在初始化函数中使用“全局”?是否可以实现任何解决方案而不必将变量作为参数传递并且不必在“返回”时返回它们?
好吧,如果不求助于不推荐的 haute mantein ,我认为这是不可能的
global
。您展示的特定案例在面向对象编程中完美适用,如果您解释您试图避免它的原因会很好:如果您尝试使用配置参数,您可以创建一个将按需导入的特定文件:
设置.py
主文件
另一个选项是@Carlangueitor 提到的选项,您可以在其中将配置移动到
.env
项目中的文件中,从而避免在其中一个文件中公开配置。您可以使用dotenv。我想你可以用字典。您可以传递字典以及返回它,将您所做的更改保留在其中。看看下面的代码。
你在这里有代码:http: //ideone.com/BjQyuX 我希望你觉得它有用。
最简单和 Pythonic 的方式,调整你自己的代码:
理想的做法是将名称更改为
inicializacion
更具表现力和明确的名称,例如:inicializacion_puerto_serie
通过将值
inicializacion
作为默认参数传递给函数,您可以使用另一个或baud_rate
不同的端口重用代码。千万不要忘记当你打开一个文件或一个串口(对于系统来说都是一样的)时要正确关闭它以避免内存泄漏。
我提出以下建议: