鱼C论坛

 找回密码
 立即注册
查看: 1380|回复: 7

[已解决]关于python中*号的问题

[复制链接]
发表于 2018-1-14 13:37:34 | 显示全部楼层 |阅读模式

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

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

x
比如:
i,*j=range(3)
这里面的收集参数*号不是会把 1 和2 打包成元组吗,为什么j是列表呢?
最佳答案
2018-1-14 16:55:07
本帖最后由 orino 于 2018-1-14 17:00 编辑

不好意思,我看错你的题目没理解你的问题。我后来查了一下,你这样的用法其实是非常少见的。*号运算符一般是用在函数的参数调用里,可以作为可变参数,也可以用来解包列表和元组。所以*号是只能用在列表和元组里面的,你这里的完整表现形式应该是(i, *j)=range(3), 我直接表示为(i, *j)=[0,1,2]好了,实际这里调用的作用是用来解包列表,它的形式其实和*j,=[1,2]是一个道理,也就是(*j,)=[1,2],所以解包完自然还是列表。解包完后实际产生了一个列表的复制。这时python3 PEP3132新定义的。

参考链接
https://www.python.org/dev/peps/pep-3132/
https://stackoverflow.com/questions/43190992/understanding-x-lst
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-14 14:17:32 | 显示全部楼层
由于有*号,所以j把1,2打包在一起了,而原来range(3)就是【0,1,2】的列表,i被赋值0,那j自然是被赋值[1.2]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-14 14:33:27 | 显示全部楼层
orino 发表于 2018-1-14 14:17
由于有*号,所以j把1,2打包在一起了,而原来range(3)就是【0,1,2】的列表,i被赋值0,那j自然是被赋值[1.2]

*不是打包成元组吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-14 14:37:37 | 显示全部楼层
额,其实不用纠结这个,因为原来的range(3)是列表,打包好后实际是([1,2]),也就是[1,2]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-14 14:51:59 | 显示全部楼层
orino 发表于 2018-1-14 14:37
额,其实不用纠结这个,因为原来的range(3)是列表,打包好后实际是([1,2]),也就是[1,2]

我就是问的这个,*号收集参数是打包成元组,为什么这里是列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-14 14:54:14 | 显示全部楼层
结果是([1,2]),但输出的时候直接会是[1,2], 就像print((1)),最后会输出1一样,你可以试一下print(([1,2]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-14 16:12:41 | 显示全部楼层
orino 发表于 2018-1-14 14:54
结果是([1,2]),但输出的时候直接会是[1,2], 就像print((1)),最后会输出1一样,你可以试一下print(([1,2]))

这是列表,我问的是,*号原本的作用是打包成元组,这里为什么变成了list类型,而不是tuple类型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-14 16:55:07 | 显示全部楼层    本楼为最佳答案   
本帖最后由 orino 于 2018-1-14 17:00 编辑

不好意思,我看错你的题目没理解你的问题。我后来查了一下,你这样的用法其实是非常少见的。*号运算符一般是用在函数的参数调用里,可以作为可变参数,也可以用来解包列表和元组。所以*号是只能用在列表和元组里面的,你这里的完整表现形式应该是(i, *j)=range(3), 我直接表示为(i, *j)=[0,1,2]好了,实际这里调用的作用是用来解包列表,它的形式其实和*j,=[1,2]是一个道理,也就是(*j,)=[1,2],所以解包完自然还是列表。解包完后实际产生了一个列表的复制。这时python3 PEP3132新定义的。

参考链接
https://www.python.org/dev/peps/pep-3132/
https://stackoverflow.com/questions/43190992/understanding-x-lst
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 16:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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