元组和列表是近亲,列表允许并且提供了方法来改变它的值,但元组是不可改变的,即不允许你改变它的值----这也是它没有方法的部分原因。

元组的主要作用是作为参数传递给函数调用、或是从函数调用那里获得参数时,保护其内容不被外部接口修改。

元组在前台的用武之地不大,但是在后台却是使用得相当频繁的。

一个例子说明元组:

 

>>> a = ("one", "two")
>>> a[0]
'one'
>>> b = ("just-one")
>>> b[0]
'j'
>>> c = ("just-one", )
>>> c[0]
'just-one'
>>> d = "just-one",
>>> d[0]
'just-one'

 

元组是由逗号决定的,而不是小括号。所以b在这里只是一个字符串而已,这就是为什么b[0]返回的是字符串中的第一个字母。而小括号的最后一个逗号则决定了那是一个元组,所以c[0]返回的正是我们希望的结果。我们甚至可以整个去掉小括号,就像上面例子中的d一样----虽然通常这样做不太好。Python的宗旨之一就是尽量显式地表达意思而不要依赖于默认行为。

 

内置序列函数和工厂函数

str:(可打印)字符串表示

list:列表表示

tuple:元组表示

len:对象的势

max:序列中“最大的”对象

range:给定范围内可迭代的数字

sorted:返回排好序的列表

sum:列表值加和(数字)

any:是不是有元素为True?

zip:返回Ngen元组的迭代器,其中每个元组包含了N个序列里对应的元素

 

@虽然以上很多函数的描述都标为序列,但是实际上这些函数都可以用在所有“可迭代”对象上。这里说的可迭代对象是指任何类似序列的数据结构,只要它可迭代就行,比如序列、迭代器、生成器、字典的键值和文件里的行等。

@zip函数接受多个序列,然后将每个序列对应位置的元素组织在一起组成一个新的元组,最后返回由这些元组组成的列表。它地长度由参数序列中最短的长度决定。举个简单的例子:

 

>>> zip([1, 2, 3], ("a", "b", "c")) 
[(1, 'a'), (2, 'b'), (3, 'c')]