python - 为什么 Python 不保护局部函数中的全局范围变量?
问题描述
除非明确定义,否则我不理解允许在全局范围内定义的变量可供本地函数访问的好处。由于问题的性质,当命名约定相似时,这似乎可能会引入一些难以跟踪的错误,如果全局变量仅可用于局部函数范围(如果明确定义为所以?
示例代码(简单):
def train(acc):
acc += 1
return acc
def infer(acc):
acc += 2
return accuracy
accuracy = train(1)
accuracy2 = infer(5)
print("train",accuracy,"inference",accuracy2)
实际python返回>>>train 2 inference 2
个人意见预期回报>>> Error: Function infer() does not have variable named accuracy
accuracy
当用户错误地返回(从全局范围)infer()
而不是acc
在本地函数范围变量中时,会出现此“错误” 。这种情况最近发生在我身上,因为我正在复制大量代码并且忘记更改函数中的返回变量名称。不幸的是,在全局范围内有一个同名的变量!
为什么 Python 不强制用户在函数中显式定义全局变量,以便每个人都清楚实际使用全局变量的意图?例子:
def train(acc):
acc += 1
return acc
def infer(acc):
global accuracy
acc = accuracy + acc
return acc
accuracy = train(1)
accuracy2 = infer(5)
print(accuracy,accuracy2) >>> 2 7
出于讨论的目的,给出的代码示例被过度简化了。
解决方案
推荐阅读
- java - 在 Java/Jackson 中从“数组”中获取元素
- android - 由于 RecylerView 第一次跳过了 Fragment Transition
- c# - 最有效地实现具有大量点的图
- opencl - 截至 2018 年年中,NVIDIA SPIR 支持的状态如何?
- java - 用于文件轮询的spring集成java dsl中的Nio locker使用
- sql-server - pecl install sqlsrv 失败并出现配置错误:C 编译器无法在 SLES 12 上创建可执行文件
- vb.net - VSTO 功能区加载项访问资源文件
- testing - 通过 ssh 连接时无法在远程 Windows 机器上找到 TestCafe
- typescript - 在 VS 代码中启用 TSLint
- bitbucket-pipelines - 为 bitbucket 管道设置 core.autocrlf