我有一些具有这种一般结构的代码:
def runSolver():
global a
global b
while (condition) :
# do some stuff
recalculateIntermediateParameters()
# do more stuff
return result
def recalculateIntermediateParameters():
# read globals
# calculate
return recalculatedParameter
# main
if __name__="__main__":
runSolver()
我想知道这是否是最佳实现方式。例如,在函数中声明全局变量是不好的做法吗?我知道在 Java 中,全局变量最好在任何函数定义之外声明。
我的想法是这在句法上“更好”:
def runSolver():
a = foo
b = bar
# do some stuff
return result
def recalculateIntermediateParameters(a, b):
# do some stuff
return recalculatedParameter
但是如果 a
和 b
只是read 而不是被函数操作呢?这会影响全局布局吗?此外,如果 a
和 b
是冗长的列表怎么办?从性能的角度来看,将值从一个函数传递到另一个函数是否有意义?哪种范例在“pythonic”代码和性能之间提供了最佳折衷?
最佳答案
当您在函数中更改标识符时,您只需要声明标识符是全局的。如果只引用a
和b
而不赋值给它们,可以省略global
语句。
例如,函数也是全局变量。 recalculateIntermediateParameters
未被分配,仅被引用,您无需使用 global recalculateIntermediateParameters
即可执行此操作。
Python 使用不同的操作码分配给局部变量和全局变量。如果你这样做:
def foo():
a = 10
对比
def foo():
global a
a = 10
Python 使用两种不同 操作将a
更新为本地或全局。
更一般地说,您希望避免使用全局变量来传递状态。而是将值作为参数传递(使用原语或复合结构,如字典或自定义类实例)。它使您的代码更易于阅读和调试,因为您可以通过函数跟踪状态,而不必单独跟踪全局。
关于python - python变量的最佳放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17513124/