我的函数什么时候会去以前的作用域寻找变量?
When does my function will go to previous scopes to look for a variable?
在 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 函数范围或全局范围中有它。
为什么在其他情况下它会在以前的范围内找到一个变量,而在这个范围内却找不到?
谢谢!
关于这个话题的问题太多了。你应该先搜索再提问。
基本上,因为你在函数 withdraw
中有 balance=balance-amount
,Python 认为 balance
是在这个函数内部定义的,但是当代码运行到 if amount>balance:
行,它没有看到 balance
的 definition/assignment,所以它抱怨 local variable 'balance' before assignment
。
nonlocal
允许您在外部(但非全局)范围内为变量赋值,它告诉 python balance
未在函数 withdraw
中定义但在它之外。
在 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 函数范围或全局范围中有它。
为什么在其他情况下它会在以前的范围内找到一个变量,而在这个范围内却找不到?
谢谢!
关于这个话题的问题太多了。你应该先搜索再提问。
基本上,因为你在函数 withdraw
中有 balance=balance-amount
,Python 认为 balance
是在这个函数内部定义的,但是当代码运行到 if amount>balance:
行,它没有看到 balance
的 definition/assignment,所以它抱怨 local variable 'balance' before assignment
。
nonlocal
允许您在外部(但非全局)范围内为变量赋值,它告诉 python balance
未在函数 withdraw
中定义但在它之外。