本人最近学习Python, 遇到了一些关于元祖和列表的问题, 如下:
Python版本为3.6
代码如下:
[1, 2] + [[3]] # -> [1, 2, [3]]
(1, 2) + ((3),) # (1, 2, 3), 为什么不是 (1, 2, (3))?
# 同理自己尝试了一下, 貌似会自动转换为一维元组
(1, 2, (((3)))) # -> (1, 2, 3)
(1, 2) + (3, ) # -> (1, 2, 3)
有两个问题
为什么元组还可以进行加法. 本人了解到元祖为不可变对象, 那为什么还可以进行加法?
为什么无法嵌套元祖. 如上面例子展示, 所有的结果都被转换为了"一维"元组, 不是很明白其中的原理?
望能有前辈解答, 不胜感激!
1 回答
![?](http://img1.sycdn.imooc.com/5333a0aa000121d702000200-100-100.jpg)
SMILET
TA贡献1796条经验 获得超4个赞
先给你的问题描述赞一个
- 先举个例子:整数、字符串也是不可变,为什么可以进行加法呢?实际上在 python 中 2 个对象能不能相加只取决于对象的
__add__
方法,只要实现了该方法,就能相加 - 并不是不能,而是因为你在加号后面的元组是错的。因为元组字面量比较特殊,要使用
()
来声明,而在元组只有一个元素的时候,就和 python 语法中括号的用法产生了语义歧义,所以 python 规定,元组只有一个元素的时候,必须在元素后加一个逗号来表明这是一个元组,而不是用括号包裹的表达式。你的第二个表达式(1, 2) + ((3),)
应该写成(1, 2) + ((3,),)
添加回答
举报
0/150
提交
取消