Skip to main content
 首页 » 编程设计

python之python变量的最佳放置

2025年05月04日18qq号

我有一些具有这种一般结构的代码:

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 更新为本地或全局。

更一般地说,您希望避免使用全局变量来传递状态。而是将值作为参数传递(使用原语或复合结构,如字典或自定义类实例)。它使您的代码更易于阅读和调试,因为您可以通过函数跟踪状态,而不必单独跟踪全局。