2

我试图了解python的最佳实践。如果我定义一个函数来访问(但不更改)全局变量,则通常不需要在函数中将变量指定为全局变量。但是将全局变量传递给函数会更快吗?我问是因为我遇到了一些关于查找全局变量的成本的参考资料,但我不确定我是否理解。例如:

def f1(localList):
    for element in localList:
        if element in globalSet:
            pass #do stuff.

def f2(localList, localSet):
    for element in localList:
        if element in localSet:
            pass #do stuff.

globalList = <arbitrary list>
globalSet  = <arbitrary set>

f1(globalList)
f2(globalList, globalSet)

与 f1 相比,f2 通常被认为是更快/更好/更“pythonic”的方法吗?

4

3 回答 3

0

使用 Globals 总是一个糟糕的设计选择。在任何情况下,您总是可以通过不使用 Globals 来提出一个更加 Pythonic 的解决方案。

  • 如果您必须在函数之间共享大量变量,您可以重新考虑 OO 方法。
  • 如果您必须将许多参数传递给函数,则可以选择 varargs 或 kargs。

请记住,参数是通过引用传递的,因此不会降低效率。

----特殊情况不足以打破常规。

于 2012-04-19T19:09:34.480 回答
0

如果数据globalListglobalSet函数紧密绑定,我将使用一个类并将这些列表定义为类属性,将这些函数定义为静态方法(或实例方法,无论我需要什么)

于 2012-04-19T19:17:21.030 回答
0

全局变量通常被认为是一般编程中的坏习惯。基本上是因为任何可以看到变量的代码都可以更改它。尤其是在多线程程序中,这可能是错误的来源。

您应该将 Python 变量视为对象的名称或引用。因此,将变量传递给函数并不昂贵。

于 2012-04-19T19:34:33.840 回答