0

在 python 3.0 中,据我所知,当我使用在本地范围内找不到的变量时,它将一直返回,直到到达全局范围以查找该变量。

我有这个功能:

def make_withdraw(balance):
    def withdraw(amount):
        if amount>balance:
            return 'insuffiscient funds'
        balance=balance-amount
        return balance
    return withdraw

p=make_withdraw(100)
print(p(30))

当我插入一行时:

nonlocal balance

在withdraw函数定义下它工作得很好,但是当我不这样做时,它会给我一个错误,我在赋值之前引用了局部变量'balance',即使我在make_withdraw函数范围或全局范围内都有它。

为什么在其他情况下它会在以前的范围内找到一个变量而在这个范围内它不会?

谢谢!

4

1 回答 1

1

关于这个话题的问题太多了。你应该在问之前搜索。

基本上,既然你有balance=balance-amountin function withdraw,Python 认为balance是在这个函数内部定义的,但是当代码运行到if amount>balance:行时,它没有看到balance' 的定义/赋值,所以它会抱怨local variable 'balance' before assignment

nonlocal允许您将值分配给外部(但非全局)范围内的变量,它告诉 pythonbalance不是在函数中定义withdraw而是在函数之外。

于 2015-03-05T13:38:28.430 回答