python - 使用全局范围变量的最佳实践?
问题描述
考虑以下代码:
class Test:
def __init__(self):
self._stuff = []
def addStuff(self, what):
self._stuff.append(what)
stuff.append(what)
def addStuff(what):
stuff.append(what)
stuff = ['item1', 'item2', 'item3']
addStuff('stuff1')
Test().addStuff('stuff2')
print stuff # ['item1', 'item2', 'item3', 'stuff1', 'stuff2']
这工作得很好,并有预期的结果。但是,来自 Java,我觉得有必要这样做:
class Test:
def __init__(self):
self._stuff = []
def addStuff(self, stuff, what):
self._stuff.append(what)
stuff.append(what)
def addStuff(stuff, what):
stuff.append(what)
stuff = ['item1', 'item2', 'item3']
addStuff(stuff, 'stuff1')
Test().addStuff(stuff, 'stuff2')
print stuff # ['item1', 'item2', 'item3', 'stuff1', 'stuff2']
结果是一样的。两者之间有什么真正的区别/好处吗?哪一个被认为是更好的实践/更 Pythonic?
解决方案
第二种方式更好。使用参数更加灵活,因为它允许每次调用函数时使用不同的值。如果您希望使用另一个值代替stuff
within addStuff
,则必须创建一个全新的函数。此外,使用全局变量通常是不好的做法,因为它会导致难以发现的错误和不必要的并发症。
另请参阅:为什么全局变量是邪恶的?
推荐阅读
- c# - 如何动态锁定线程并避免竞争条件
- php - 需要帮助从数据库值创建会话
- c# - 如何仅检测相同颜色的碰撞?
- python - 气流 - 从父文件夹导入
- javascript - 从 Uint8Array 转换为字符串并返回
- visual-studio-2017 - TFS 2017 Visual Studio Build 任务不生成输出文件夹/文件
- elasticsearch - 限制匹配的过滤条件
- java - 如何在 Eclipse 中启动基于 SVM 的分类项目?
- macos - 如何从 VSCode 中删除项目快捷方式
- python - 无法使用标准方法将 MotorCursor 对象转换为异步函数中的列表