我是Python的初学者,并且使用Mark Lutz的书来学习Python的基础知识.
这是作者用来演示使用列表存储状态信息的示例:
def tester(start):
def nested(label):
print(label,state[0])
state[0] += 1
state = [start]
return nested
这是测试状态信息的代码:
F = tester(3)
F('sam')
F('sam')
您会看到计数器从3开始增加,然后继续.本质上,以上代码将初始状态开始(在对象初始化期间传递)存储在[state]中,并在每次调用标签时将其递增.
但是,我不确定为什么Python不会在嵌套块中引发错误.具体来说,[state]对测试人员而言是本地的,并且不是嵌套的.
为了说明我的意思,我将用状态替换state [0].
def tester(start):
def nested(label):
print(label,state) #Replaced state[0] with state
state += 1 #Replaced state[0] with state
print("after:",state)
state = start #Replaced state[0] with state
return nested
从技术上讲,上面的代码也应该可以正常工作,因为我所做的只是用变量替换了列表.但是,PyCharm甚至不会运行此代码.我收到错误nboundLocalError:赋值之前引用了局部变量’state’
有人可以解释为什么带有列表的版本工作正常吗?作者指出:“这利用了列表的可变性,并且依赖于就地对象不会将名称归类为本地的事实.”
我不太确定那是什么意思.有人可以帮帮我吗?感谢您的帮助.