鱼C论坛

 找回密码
 立即注册
查看: 1976|回复: 4

[已解决]永久存储,课上范例问题

[复制链接]
发表于 2017-4-6 23:48:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
永久存储那一课里面,有一个“一个任务”,里面代码示范分割字符串文本内容,

for each_line in f:
   if each_line[ : 6 ] != ' ====== '
        ( role , line_spoken ) = each_line.split( ':',1 )

        .......



就是这一句: ( role , line_spoken ) = each_line.split( ':',1 )

没看懂这一句什么意思

( role , line_spoken ) 这个是什么?元组?字典????没明白,求指教
最佳答案
2017-4-7 15:39:03
这种形式可以认为是用一个元组来接受列表的元素的值。
each_line.split( ':',1 )是一个两个元素的列表
( role , line_spoken ) 可以认为是一个元组,也可简写成role , line_spoken
实际上这种方式不仅能接收一个列表,还可以:
  1. 元组当然可以了
  2. >>> a, b = (12, 23)
  3. >>> a
  4. 12
  5. >>> b
  6. 23
  7. 集合也成,不过因为集合是无序的,那个值在前是随机的。
  8. >>> a, b = {12, 23}
  9. >>> a
  10. 12
  11. >>> b
  12. 23
  13. 字典也行
  14. >>> a, b ={1: 12, 2: 23}
  15. >>> a
  16. 1
  17. >>> b
  18. 2
  19. >>> a, b = {1: 12, 2: 23}.values()
  20. >>> a
  21. 12
  22. >>> b
  23. 23
  24. 甚至字符串也行
  25. >>> a, b = '12'
  26. >>> a
  27. '1'
  28. >>> b
  29. '2'
  30. 说起来只要是可迭代的对象都成。
  31. >>> a, b = range(2)
  32. >>> a
  33. 0
  34. >>> b
  35. 1
  36. 但元素的个数必须与等式左边的变量数相同。
  37. >>> a, b = [1, 2, 3]
  38. Traceback (most recent call last):
  39.   File "<pyshell#77>", line 1, in <module>
  40.     a, b = [1, 2, 3]
  41. ValueError: too many values to unpack (expected 2)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-4-7 08:38:57 | 显示全部楼层
本帖最后由 Aifrincoo 于 2017-4-7 08:41 编辑

我感觉是可以去掉括号的,只是他这个元组却并没有赋值到其他地方。
当然你( role , line_spoken ) 就是元组了
加入原来role=123456    line_spoken=456
o = (role, line_spoken)
role = 12
print(role)                  role = 12
print(o)                      o = (132456, 456)

我把赋值语句换成[ role , line_spoken ] = each_line.split( ':',1 )都没有改变什么
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-7 15:10:23 | 显示全部楼层
本帖最后由 zlj19931010 于 2017-4-7 15:18 编辑

( role , line_spoken ) = each_line.split( ':',1 )  根据‘;’分割,最多分割1次
比如文本:小甲鱼:我草鸡帅!
最多一次根据‘;’分割之后得到 role=小甲鱼    line_spoken =我草鸡帅!

  1. >>> a = ( role , line_spoken ) = '小甲鱼:哈哈哈哈'.split( ':',1 )
  2. >>> a
  3. ['小甲鱼', '哈哈哈哈']
  4. >>> type(a)
  5. <class 'list'>
  6. >>>
复制代码


是个列表,split返回list,然后给role line_spoken  赋值,所以a得到的值是split返回的值,不是(role , line_spoken)
  1. >>> a = (role,line_spoken)
  2. >>> a
  3. ('小甲鱼', '哈哈哈哈')
  4. >>> type(a)
  5. <class 'tuple'>
  6. >>>
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-7 15:39:03 | 显示全部楼层    本楼为最佳答案   
这种形式可以认为是用一个元组来接受列表的元素的值。
each_line.split( ':',1 )是一个两个元素的列表
( role , line_spoken ) 可以认为是一个元组,也可简写成role , line_spoken
实际上这种方式不仅能接收一个列表,还可以:
  1. 元组当然可以了
  2. >>> a, b = (12, 23)
  3. >>> a
  4. 12
  5. >>> b
  6. 23
  7. 集合也成,不过因为集合是无序的,那个值在前是随机的。
  8. >>> a, b = {12, 23}
  9. >>> a
  10. 12
  11. >>> b
  12. 23
  13. 字典也行
  14. >>> a, b ={1: 12, 2: 23}
  15. >>> a
  16. 1
  17. >>> b
  18. 2
  19. >>> a, b = {1: 12, 2: 23}.values()
  20. >>> a
  21. 12
  22. >>> b
  23. 23
  24. 甚至字符串也行
  25. >>> a, b = '12'
  26. >>> a
  27. '1'
  28. >>> b
  29. '2'
  30. 说起来只要是可迭代的对象都成。
  31. >>> a, b = range(2)
  32. >>> a
  33. 0
  34. >>> b
  35. 1
  36. 但元素的个数必须与等式左边的变量数相同。
  37. >>> a, b = [1, 2, 3]
  38. Traceback (most recent call last):
  39.   File "<pyshell#77>", line 1, in <module>
  40.     a, b = [1, 2, 3]
  41. ValueError: too many values to unpack (expected 2)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-4-7 19:00:07 | 显示全部楼层
冬雪雪冬 发表于 2017-4-7 15:39
这种形式可以认为是用一个元组来接受列表的元素的值。
each_line.split( ':',1 )是一个两个元素的列表
(  ...

谢谢。明白这个写法了,真真的,我先百度没找到这是什么意思,翻了好久
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-26 17:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表