在Python脚本中使用全局变量

在Python脚本中使用全局变量,python,Python,我在python方面相对缺乏经验。我制作了一个小的自定义函数,在每次执行脚本时将日志记录到远程文件中,作为单个文本块: global logContent DEBUG = 'debug' INFO = 'info' ERROR = 'error' def logMessage(level, message): global logContent logContent += f'{<timestamp>} - {level}: {message}\n' def fl

我在python方面相对缺乏经验。我制作了一个小的自定义函数,在每次执行脚本时将日志记录到远程文件中,作为单个文本块:

global logContent
DEBUG = 'debug'
INFO = 'info'
ERROR = 'error'

def logMessage(level, message):
    global logContent
    logContent += f'{<timestamp>} - {level}: {message}\n'

def flushLogsToDB():
    ...

logMessage(INFO, 'script executes here')
flushLogsToDB()
全局日志内容
调试='DEBUG'
INFO='INFO'
错误='ERROR'
def日志消息(级别,消息):
全局日志内容
logContent+=f'{}-{level}:{message}\n'
def flushLogsToDB():
...
日志消息(信息“脚本在此执行”)
flushLogsToDB()
其思想是将实现隐藏在传递变量
logContent
之后,然后在单个API调用中发送它

因为通常我使用的是更多的面向对象语言,所以我不确定在当前环境下这是否“合适”。通常我知道全局变量是魔鬼,但是由于这个脚本是以幂等方式执行的,就“最佳实践”而言,这样可以吗

当然也在寻找一些关于一般Python最佳实践的资源


谢谢你的提示

我不认为有人会为这种做法辩护,因为替代方案更干净,也不会复杂得多

class Mylog:
    def __init__(self):
        self.content = []

    def log_message(self, message):
        self.content.append(message)

    def flush(self):
        ... something with self.content
        self.content = []
创建一个新的
Mylog
实例当然会创建一个与当前
logContent
范围相似的对象;但是该功能的封装还将方法名隐藏在全局范围之外,并允许您拥有多个
Mylog
实例


对于这个特定的用例,可以考虑从Python标准库扩展现有的
日志记录
模块。

有很多方法可以处理这个问题。一种是使用记录器类,例如。如果出于某种原因您不想这样做,您还可以创建一个闭包,将日志函数绑定到特定的日志变量。我认为课堂解决方案更好。是的。我想得越多,我就越意识到我是多么的落后。谢谢