• 序列中的元组tuple数据类型

    为什么要使用元组
    服务器君一共花费 8.018 ms 进行了 2 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    Tuple 是不可变的 list。一旦创建了一个 tuple,就不能以任何方式改变它。

    tuple的构建

    先来一个简单例子了解下 tuple

    >>> t = ("a", "b", "nowamagic", "z", "example") 
    >>> t
    ('a', 'b', 'nowamagic', 'z', 'example')
    >>> t[0] 
    'a'
    >>> t[-1]                                      
    'example'
    >>> t[1:3] 
    ('b', 'nowamagic')
    
    • 定义 tuple 与定义 list 的方式相同,但整个元素集是用小括号包围的,而不是方括号。
    • Tuple 的元素与 list 一样按定义的次序进行排序。Tuples 的索引与 list 一样从 0 开始,所以一个非空 tuple 的第一个元素总是 t[0]。
    • 负数索引与 list 一样从 tuple 的尾部开始计数。
    • 与 list 一样分片 (slice) 也可以使用。注意当分割一个 list 时,会得到一个新的 list ;当分割一个 tuple 时,会得到一个新的 tuple。
    seq = ()  或  seq = tuple()   #构建empty tuple
    seq = (4,)  或  4,     #构建只有一个元素的tuple (4),逗号是必不可少的,不然会返回数字4
    seq = (3,4,5) 或  seq = 3,4,5
    seq =  tuple([3,4,5])  # 生成 (3,4,5)
    

    iterable可以是任何支持iteration的Sequence,Container。上面我们使用的参数是list [3,4,5],也可以就是用tuple  (3,4,5)。

    对于tuple来说,重要的是逗号",",而不是括号,从上面我们可以看到括号没有歧义可以省去,但是有些地方必须要,比如f(a,b,c)表示这个函数接受三个参数,而f((a,b,c))表示这个函数接受一个参数,这个参数是一个三元的tuple。

    tuple是不可被赋值的,所以tuple常用来做不同type(异质)的元素的序列集合,而list就常用来做相同type(同质)的元素集合。

    那么使用 tuple 有什么好处呢?

    • Tuple 比 list 操作速度快。如果您定义了一个值的常量集,并且唯一要用它做的是不断地遍历它,请使用 tuple 代替 list。
    • 如果对不需要修改的数据进行 “写保护”,可以使代码更安全。使用 tuple 而不是 list 如同拥有一个隐含的 assert 语句,说明这一数据是常量。如果必须要改变这些值,则需要执行 tuple 到 list 的转换 (需要使用一个特殊的函数)。
    • 还记得我说过 dictionary keys 可以是字符串,整数和 “其它几种类型”吗?Tuples 就是这些类型之一。Tuples 可以在 dictionary 中被用做 key,但是 list 不行。实际上,事情要比这更复杂。Dictionary key 必须是不可变的。Tuple 本身是不可改变的,但是如果您有一个 list 的 tuple,那就认为是可变的了,用做 dictionary key 就是不安全的。只有字符串、整数或其它对 dictionary 安全的 tuple 才可以用作 dictionary key。
    • Tuples 可以用在字符串格式化中,我们会很快看到。
    • Tuple 可以转换成 list,反之亦然。内置的 tuple 函数接收一个 list,并返回一个有着相同元素的 tuple。而 list 函数接收一个 tuple 返回一个 list。从效果上看,tuple 冻结一个 list,而 list 解冻一个 tuple。
更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [Python程序设计] Tornado背景知识介绍 4 个条目
  2. [移动开发] Android Studio里的Gradle 3 个条目
  3. [移动开发] Android SQLite增删查改实例(数据:魔弹之王) 2 个条目
  4. [PHP程序设计] PHP扩展模块安装 1 个条目
  5. [PHP程序设计] PHP里的引用 5 个条目
  6. [软件工程与项目管理] 开始使用Git 3 个条目
  7. [Python程序设计] Django模板系统 11 个条目
  8. [移动开发] Android View注入框架Butter Knife 3 个条目
  9. [JavaScript程序设计] jQuery与表单操作 2 个条目
  10. [PHP程序设计] PHP与函数式编程 1 个条目
  11. [PHP程序设计] 声明式编程范式 12 个条目
  12. [数据库技术] SQL基础语法 1 个条目
窗口 -- [协会]