python变量的最佳位置

时间:2013-07-07 14:42:37

标签: python

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

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

但是,如果ab读取未被函数操纵,该怎么办?这会影响全球布局吗?此外,如果ab是冗长的列表怎么办?在性能视角中将值从函数传递给函数是否有意义?哪种范例提供了“pythonic”代码和性能之间的最佳折衷?

1 个答案:

答案 0 :(得分:6)

只有 需要在函数中更改标识符时声明标识符是全局的。如果您仅引用ab而未分配给它们,则可以省略global语句。

例如,

函数也是全局变量。 recalculateIntermediateParameters未分配,仅被引用,您无需使用global recalculateIntermediateParameters即可。

Python使用不同的操作码来分配本地和全局。如果你这样做:

def foo():
    a = 10

def foo():
    global a
    a = 10

Python使用两个不同的操作将a更新为本地或全局。

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