本人最近学习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)
有两个问题
- 为什么元组还可以进行加法. 本人了解到元祖为不可变对象, 那为什么还可以进行加法?
- 为什么无法嵌套元祖. 如上面例子展示, 所有的结果都被转换为了"一维"元组, 不是很明白其中的原理?
望能有前辈解答, 不胜感激!
先给你的问题描述赞一个
__add__
方法,只要实现了该方法,就能相加()
来声明,而在元组只有一个元素的时候,就和 python 语法中括号的用法产生了语义歧义,所以 python 规定,元组只有一个元素的时候,必须在元素后加一个逗号来表明这是一个元组,而不是用括号包裹的表达式。你的第二个表达式(1, 2) + ((3),)
应该写成(1, 2) + ((3,),)