首页 > 解决方案 > 为什么全球如此糟糕?

问题描述

在我的 GUI 应用程序中,我从内部的嵌套函数中为函数_register_allowed中的值分配值。mainmain

def toggle_registration():
    if _register_allowed:
        _register_allowed = False
    else:
        _register_allowed = True

这当然会返回一个 UnboundLocalError。

我的问题是,为什么使用global声明关键字来解决这个问题?

因为它实现了与 相同的最终结果nonlocal,即_register_allowed改变了嵌套函数范围之外的值,而不是创建了一个新的局部变量;为什么这是一种不好的或非 Pythonic 的方法来解决这个问题?

标签: pythonscope

解决方案


给出一个简单的答案:因为它很难阅读。例如:

我有三个功能:

def a():
    A *= 2

def b():
     A += 7

 def C():
     A = 0

另外,A原本是2

现在,想象一下这些函数被分成多个文件。有一天,您想做 A 次任务,但 A 的价值与您的预期不同!现在,您将如何弄清楚为什么 A 具有不同的值?你从哪里开始调试?

相反,如果所有这些函数都需要 A 作为输入并返回它,那么您的变量在哪里使用以及它们何时更改会立即变得清晰,从而更容易调试!


推荐阅读