首页 > 解决方案 > 为什么 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

出于讨论的目的,给出的代码示例被过度简化了。

标签: pythonpython-3.x

解决方案


推荐阅读