python - python变量的最佳放置

标签 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 只是read 而不是被函数操作呢?这会影响全局布局吗?此外,如果 ab 是冗长的列表怎么办?从性能的角度来看,将值从一个函数传递到另一个函数是否有意义?哪种范例在“pythonic”代码和性能之间提供了最佳折衷?

最佳答案

当您在函数中更改标识符时,您需要声明标识符是全局的。如果只引用ab而不赋值给它们,可以省略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/

相关文章:

python - 无法弄清楚 python selenium webdriver move_to_element 功能

python - 如何使用 numpy 对 3D 数组的内部 2d 数组进行排序?

python乘法测验无效的语法

python - 如何使用 igraph for python 绘制基于社区的图表

Python:如何从 xml 获取 namespace ?

python - 在 Pandas 中填充 NaN 的复杂案例

python - 如何将一个数字除以索引中的一个数字?

python - 测试 Python 类中的特定方法

python - 一种优雅、更短的方式来解决字母等级分配问题

python - 如何在矩阵上执行函数的离散优化?