+5 投票
分类:调试问题 | 用户: 7 7 4 (1.0k 分)

这个禁止函数修改列表的[:]有什么问题,为什么这样报错

1个回答

+3 投票
用户: 10 8 4 (2.7k 分)
采纳于 用户:
 
已采纳

嗯…

按我的理解不应该在函数声明中写unprinted_message[:],把[:]去掉就好

应该是在函数调用的时候send_message(unprinted_message[:],completed_message)

函数声明时定义一个变量名,它只管接受参数<显然unprinted_message[:]不能做一个变量名^v^>

unprinted_message[:]是一个包含了原函数全部元素的切片,即调用函数时你要传入一个原列表的副本 <送个副本进去当然就不会改变原值啦^v^>

***

(据我所知没法在函数声明的时候决定是否修改传入的参数,这只由传入的参数本身是否可变决定)(比方你传入一个列表/字典,传过去的应该是他们的地址,不可避免会对原值做修改)(所以对这些可变对象我们就只能送进去一个副本啦)(像数字字符串元组这种的就只是传个值进去,这个值对应的是一个新的地址,你想改变原值也做不到)

<另外最好不要在函数内外界同一个变量名,虽然有作用域在不影响运行,但万一出问题了也不好调试>

欢迎来到 在线问答系统 ,有什么不懂的可以尽管在这里提问,你将会收到社区其他成员的回答。
...