为什么 Python 不能防止局部函数中的全局作用域变量?

时间:2021-04-18 08:58:56

标签: python python-3.x

我不明白允许局部函数访问全局作用域中定义的变量的好处,除非明确定义。由于问题的性质,当命名约定相似时,这似乎可能会引入一些难以跟踪的错误,如果全局变量仅对局部函数范围可用,如果明确定义为所以?

示例代码(简化):

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

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

0 个答案:

没有答案