首页 > 解决方案 > 使用全局范围变量的最佳实践?

问题描述

考虑以下代码:

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?

标签: python

解决方案


第二种方式更好。使用参数更加灵活,因为它允许每次调用函数时使用不同的值。如果您希望使用另一个值代替stuffwithin addStuff,则必须创建一个全新的函数。此外,使用全局变量通常是不好的做法,因为它会导致难以发现的错误和不必要的并发症。

另请参阅:为什么全局变量是邪恶的?


推荐阅读