Tuple是Python基本数据结构之一,其思想十分简单,就是用一个单一的量来代表一堆任意数据松散的集合,其显而易见的一个用处就是在一次函数调用中返回多个值;
在非单根结构,强类型的语言如C++中,是很难实现能够容纳任意多元素的Tuple的,标准库提供了一个退化的Tuple,std::pair<F,S>,只能容纳两个元素,boost和loki提供了能够容纳最多两位数元素的Tuple,绝大多数情况下也够用了;
或曰:在像Java这样的单根语言中,Tuple不就是Object[]吗?是的,如果Tuple仅限于容纳多个元素,它就是只读的Object[];
然而,Python为Tuple配备了Automated Tuple Packing & Automated Sequence Unpacking (自动化的打包/拆包),使Tuple获得了及其方便和强大的表达能力
1,自动打包带来的表达能力举例:
函数调用传递任意的参数个数,不需要你显式的把多个参数像其它语言那样弄到一个数组或集合里,你只需要把多个参数一个接一个的传递给函数即可,解释器会将参数自动打包为Tuple
C++的可变参数在这种以强类型著称的语言中显得那样格格不如,在各种Effective条款中被推荐避免使用
JavaSE 5.0 开始提供了类似的功能,虚拟机会将参数打包为数组
2, 自动拆包带来的表达能力举例:
同时获得Dictionary的Key和Value:for key, value in dict.iteritems(): 你不再需要像其它语言那样在循环体里再分别获得key和value
3, 自动打包结合自动拆包带来的表达能力举例:
不使用临时变量交换两个变量的值:a, b = b, a