python - 为什么全球如此糟糕?
问题描述
在我的 GUI 应用程序中,我从内部的嵌套函数中为函数_register_allowed
中的值分配值。main
main
def toggle_registration():
if _register_allowed:
_register_allowed = False
else:
_register_allowed = True
这当然会返回一个 UnboundLocalError。
我的问题是,为什么使用global
声明关键字来解决这个问题?
因为它实现了与 相同的最终结果nonlocal
,即_register_allowed
改变了嵌套函数范围之外的值,而不是创建了一个新的局部变量;为什么这是一种不好的或非 Pythonic 的方法来解决这个问题?
解决方案
给出一个简单的答案:因为它很难阅读。例如:
我有三个功能:
def a():
A *= 2
def b():
A += 7
def C():
A = 0
另外,A原本是2
现在,想象一下这些函数被分成多个文件。有一天,您想做 A 次任务,但 A 的价值与您的预期不同!现在,您将如何弄清楚为什么 A 具有不同的值?你从哪里开始调试?
相反,如果所有这些函数都需要 A 作为输入并返回它,那么您的变量在哪里使用以及它们何时更改会立即变得清晰,从而更容易调试!
推荐阅读
- c++ - 按下 SDL 操纵杆按钮 / C++
- jquery - JQuery:如何向下滚动到刚刚使用 .show() 显示的元素
- azure - 使用 ASE v1 进行 Azure API 管理
- docker - Zookeeper 无法创建新的 znode
- asp.net-core-2.1 - 使用主 Web 应用程序的 dbcontext 的 Razor 类库
- c++ - 使用运算符 [] 在 std::vector<> 上引用过去最后一个元素的问题
- r - R - 向量中数字组合的频率计数超出完全匹配
- ruby - Ruby 将任意函数和参数传递给另一个函数
- linux - 在所有 Linux 发行版中,“dir”命令的输出是否相同?
- android - (Android) 如何禁用嵌套recyclerview的某些元素的滚动