我试图了解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”的方法吗?
答案 0 :(得分:0)
使用Globals总是一个糟糕的设计选择。在任何情况下,你都可以通过不使用Globals来提出一个更加Pythonic的解决方案。
请记住,参数是通过引用传递的,因此没有效率损失。
----特殊情况不足以打破规则。
答案 1 :(得分:0)
如果globalList
和globalSet
数据与函数紧密绑定,我会使用一个类并将这些列表定义为类属性,并将这些函数定义为staticmethods(或实例方法,无论我需要什么)< / p>
答案 2 :(得分:0)
一般来说,编程中的全局变量是generally considered bad practice。基本上因为任何可以看到变量的代码都可以改变它。特别是在多线程程序中,这可能是错误的来源。
您应该将Python变量视为对象的名称或对象的引用。因此,将变量传递给函数并不昂贵。