zoukankan      html  css  js  c++  java
  • 元组

    # 元组,不仅仅是不可变的列表   除了用作不可变的列表,它还可以用于没有字段名的记录
    
    # 元组和记录
    lax_coordinates = (33.9425, -118.408056)
    city, year, pop, chg, area = ("Tokyo", 2003, 32450, 0.66, 8014)
    traveler_ids = [("USA", "31195855"), ("BRA", "CE342567"), ("ESP", "XDA205856")]
    for passport in sorted(traveler_ids):
        print("%s/%s" % passport)
    
    # for循环可以分别提取元组里的元素,也叫做拆包.拆包让元组可以完美的被当作记录来使用.
    for country, _ in traveler_ids:
        print(country)
    
    # 元组拆包
    # 平行赋值
    latitude, longitude = lax_coordinates
    # 另一个很优雅的写法,当属不使用中间变量交换两个变量的值
    latitude, longitude = longitude, latitude
    # 还可以用*运算符把一个可迭代对象拆开作为函数的参数
    print(divmod(20, 8))  # 求商和余数
    t = (20, 8)
    print(divmod(*t))
    q, r = divmod(*t)
    print(q, r)
    
    import os
    # 对于我们不关心的数据,_占位符能帮助处理这种情况
    _, filename = os.path.split("E:\Project\FluentPython\Chap2\demo1.py")
    print(filename)
    
    # 用*来处理剩下的元素
    # 在平行赋值中,*前缀只能用在一个变量名的前面,但是这个变量可以出现在赋值表达式的任意位置.
    a, b, *rest = range(5)
    
    # 嵌套元组拆包
    metro_areas = [
        ("Tokyo", "JP", 36.933, (35.689722, 139.691667)),
        ("Delhi NCR", "IN", 36.933, (35.689722, 139.691667)),
        ("Mexico City", "MX", 36.933, (35.689722, 139.691667)),
        ("New York-Newark", "US", 36.933, (35.689722, 139.691667)),
        ("Sao Paulo", "BR", 36.933, (35.689722, 139.691667)),
    ]
    print("{:15} | {:^9} | {:^9}".format("", "lat.", "long."))
    fmt = "{:15} | {:9.4f} | {:9.4f}"   # 强大的format
    for name, cc, pop, (latitude, longitude) in metro_areas:
        if longitude >= 0:
            print(fmt.format(name, latitude, longitude))
    
    
    # 具名元组
    from collections import namedtuple
    # collections.namedtuple是一个工厂函数,它可以用来构建一个带字段名的元组和一个有名字的类
    
    # 定义和使用具名元组
    # 创一个具名元组需要两个参数,一个是类名,另一个是类的各个字段的名字.后者可以是由数个字符串组成的可迭代对象,或者是由空格分隔开的字段名组成的字符串.
    City = namedtuple("City", "name country pop coordinates")
    # 存放在对应字段里的数据要以一串参数的形式传入到构造函数中.
    tokyo = City("Tokyo", "JP", 36.933, (35.689722, 139.691667))
    tokyo_ = tuple(("Tokyo", "JP", 36.933, (35.689722, 139.691667)))  # 注意,元组的构造函数却只接受单一的可迭代对象
    print(tokyo)
    print(tokyo_)
    # 可以通过字段名或者位置来获取一个字段的信息
    print(tokyo.pop)
    print(tokyo[2])
    
    # 除了从普通元组那里继承来的属性外,具名元组还有一些自己专有的属性.
    print(City._fields)  # _fields属性是一个包含这个类所有字段名称的元组
    LatLong = namedtuple("LatLong", "lat long")
    delhi_data = ("Delhi NCR", "IN", 36.933, LatLong(35.689722, 139.691667))
    # 用_make()通过接受一个可迭代对象来生成这个类的一个实例,它的作用和City(*delhi_data)是一样的
    delhi = City._make(delhi_data)
    # _asdict()把具名元组以collections.OrderedDict的形式返回,我们可以利用它来把元组里的信息友好地呈现出来
    print(delhi._asdict())
    
    
    # 作为不可变列表的元组
    # 除了增减相关的方法以外,元组支持列表的所有其他方法.
    # 还有一个例外是__reversed__方法,但是这个方法只是个优化而已,reversed()在没有__reversed__的情况下也是合法的.
    
    
  • 相关阅读:
    Oracle创建上下文 SYS_CONTEXT
    闪回版本查询
    物化视图创建案例
    Oracle 多租户环境学习路线图
    【Mysql MHA】CentOS7.6+Mysql8.0.16 入坑
    【翻译】--19C Oracle 安装指导
    Docker(3)---常用命令
    Docker(2)---安装(设置镜像加速器)
    Docker(1)---基础概念
    AMQP高级消息队列协议
  • 原文地址:https://www.cnblogs.com/zyyhxbs/p/13139920.html
Copyright © 2011-2022 走看看