zoukankan      html  css  js  c++  java
  • python 学习笔记(二):为元组的每个元素命名,提高程序的可读性

    在程序中有些数据为固定格式时,即字段数量确定、字段位置顺序确定不变,我们就可以用元组来储存。使用元组的优势是储存空间很小,访问速度也很快。如下代码对每个学生信息用元组来表示:

     1 # ('Jim', 16, 'male', 'jim8726@gmail.com')
     2 # ('LiLei', 17, 'male', 'lilei8928@qq.com')
     3 # ('Lucy', 16, 'female', 'lucy123@yahoo.com')
     4 
     5 student = ('Jim', 16, 'male', 'jim8726@gmail.com')
     6 # name
     7 print(student[0])
     8 # age
     9 if student[1] >= 18:
    10     pass
    11 # sex
    12 if student[2] == 'male':
    13     pass

    程序中使用了0、1、2的索引值来访问字段,这些数字无法明确地表达该字段所代表的含义,对程序的后期维护和修改是非常不利的。那我们能不能像C语言中一样,用名字来明确表达该字段的含义,如:

    1 enum Student{
    2     NAME,
    3     AGE,
    4     SEX,
    5     EMAIL      
    6 }

    在python中没有真正意义上的枚举类型,我们可以通过其它方法来实现,具体解决方案有二:

    方案一:定义类似于其它语言的枚举类型,也就是定义一系列数值常量

    1 student = ('Jim', 16, 'male', 'jim8726@gmail.com')
    2 NAME, AGE, SEX, EMAIL = range(4) # 将0,1,2,3分别赋给变量
    3 print(student[NAME]) # 访问姓名字段
    4 if student[AGE] >= 18: # 访问年龄字段
    5     ...
    6 if student[SEX] == 'male': # 访问性别字段
    7     ...
    8 print(student[EMAIL]) # 访问Email字段

    方案二:使用标准库中的collections.namedtuple替代内置tuple

     1 from collections import namedtuple
     2 # namedtuple 相当于类工厂,它的第一个参数是类的名称,
     3 # 第二个参数是一个属性列表,相当于元组的字段
     4 Student = namedtuple('Student', ['name', 'age', 'sex', 'email'])
     5 # 实例化一个类对象
     6 st = Student('Jim', 16, 'male', 'jim8928@gmail.com')
     7 # 不再通过索引来访问元组的字段,而是通过元组对象的属性来访问各个字段
     8 print(st.name)
     9 print(st.age)
    10 print(st.sex)
    11 print(st.email)

    上面的 Student 类是内置 tuple 类的子类,对象 st 是它的一个实例,在程序中的开销仅比内置 tuple 稍大一些。

  • 相关阅读:
    Redis 之服务器集群配置
    Redis 之持久化(rdb、aof)
    Redis 之消息发布与订阅(publish、subscribe)
    Redis事物及锁的运用
    Redis 之hash集合结构及命令详解
    对Ul下的li标签执行点击事件——如何获取你所点击的标签
    .net 面试题(3)
    SQL Server 系统时间
    分布式内存对象缓存 memcached
    MVC 模板页和布局
  • 原文地址:https://www.cnblogs.com/walo/p/11250111.html
Copyright © 2011-2022 走看看