初学python小问题

蜡笔小可 2016-09-18 01:58:25
书上说 元组相当于常量列表,不可变,那为什么可能在迭代器中使用,
如 for each_line in data:
(role,line_spoken)=each_line.split(':',1)
print.....
这不是赋值改变了么,不会出错么,望解答,多谢
...全文
410 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
蜡笔小可 2016-09-19
  • 打赏
  • 举报
回复
引用 5 楼 sprawling的回复:
@my_thinkpad[E:base]|4> y1+=(2,3)
@my_thinkpad[E:base]|5> y1
                    <5> (1, 2, 3, 2, 3)
@my_thinkpad[E:base]|6> y1
                    <6> (1, 2, 3, 2, 3)
@my_thinkpad[E:base]|7> id(y1)
                    <7> 45193040
@my_thinkpad[E:base]|8> y1+=(2,3)
@my_thinkpad[E:base]|9> id(y1)
                    <9> 43895976
@my_thinkpad[E:base]|10> y1
                    <10> (1, 2, 3, 2, 3, 2, 3)
@my_thinkpad[E:base]|11> y1[1]
                    <11> 2
@my_thinkpad[E:base]|12> y1[1]=7
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-12-8d3af7389ff6> in <module>()
----> 1 y1[1]=7

TypeError: 'tuple' object does not support item assignment
@my_thinkpad[E:base]|13>
看看这个就差不多了.
是不是类似于C+的顶层COnst与底层const?所指的常量不可变,但是自身可以重新被赋值。
sprawling 2016-09-18
  • 打赏
  • 举报
回复
@my_thinkpad[E:base]|4> y1+=(2,3)
@my_thinkpad[E:base]|5> y1
                    <5> (1, 2, 3, 2, 3)
@my_thinkpad[E:base]|6> y1
                    <6> (1, 2, 3, 2, 3)
@my_thinkpad[E:base]|7> id(y1)
                    <7> 45193040
@my_thinkpad[E:base]|8> y1+=(2,3)
@my_thinkpad[E:base]|9> id(y1)
                    <9> 43895976
@my_thinkpad[E:base]|10> y1
                    <10> (1, 2, 3, 2, 3, 2, 3)
@my_thinkpad[E:base]|11> y1[1]
                    <11> 2
@my_thinkpad[E:base]|12> y1[1]=7
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-12-8d3af7389ff6> in <module>()
----> 1 y1[1]=7

TypeError: 'tuple' object does not support item assignment
@my_thinkpad[E:base]|13>
看看这个就差不多了.
sprawling 2016-09-18
  • 打赏
  • 举报
回复
这个是每次都重新生成tuple对象了. 生成以后是不能改变的.但是可以生成新的对象.
Thomas_young2015 2016-09-18
  • 打赏
  • 举报
回复
每次for循环遍历都是一个不同的元祖,role的值并没有改变,只是由于你并没有把前面的值保存起来,导致role值的数据内存每次都被最新的给覆盖了
蜡笔小可 2016-09-18
  • 打赏
  • 举报
回复
引用 1 楼 关山路遥的回复:
for each_line in data: (role,line_spoken)=each_line.split(':',1) print..... each_line的值并没有变,只是按照each_line创造了新的数据副本,如果打印each_line还是原来的值
我的意思是元组中的元素,例如role的值在for的每次循环下都在改变,不是说元组是常量列表么
关山路遥 2016-09-18
  • 打赏
  • 举报
回复
for each_line in data: (role,line_spoken)=each_line.split(':',1) print..... each_line的值并没有变,只是按照each_line创造了新的数据副本,如果打印each_line还是原来的值

37,737

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧