Python函数:如果只访问它们,则传递全局变量?

时间:2012-04-19 18:56:35

标签: python function variables arguments global

我试图了解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”的方法吗?

3 个答案:

答案 0 :(得分:0)

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

  • 如果你必须在功能之间共享很多变量,你可以 重新考虑面向对象的方法。
  • 如果你必须将许多参数传递给a 功能,你可以选择varargs或kargs。

请记住,参数是通过引用传递的,因此没有效率损失。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

一般来说,编程中的全局变量是generally considered bad practice。基本上因为任何可以看到变量的代码都可以改变它。特别是在多线程程序中,这可能是错误的来源。

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