python列表求和显示unsupport,Python中列表的状态信息和不变性

我是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’

有人可以解释为什么带有列表的版本工作正常吗?作者指出:“这利用了列表的可变性,并且依赖于就地对象不会将名称归类为本地的事实.”

我不太确定那是什么意思.有人可以帮帮我吗?感谢您的帮助.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值