美文网首页Pythonic程序员
Python 50问 [2]:如何为元组中每个元素命名

Python 50问 [2]:如何为元组中每个元素命名

作者: Airing | 来源:发表于2016-09-03 13:31 被阅读108次

常规场景

先来看一个案例。

学生信息系统中数据为固定格式(姓名,年龄,性别,邮箱地址),学生数据很大为了减小存储开销,对每个学生我们用元组表示。但是,访问时,我们通常使用索引(index)访问,大量的索引降低了程序的可读性

# 现有如下的一些元组
# ('Jim', 16, 'male', 'jim@ursb.me')
# ('Airing', 20, 'male', 'airing@ursb.me')
# ('Lucy', 16, 'female', 'lucy@ursb.me')

student = ('Jim', 16, 'male', 'jim@ursb.me')

# name
print student[0]

# age
print student[1]

# sex
print student[2]

可见,程序中将会大量的出现一些纯数字的索引值,非常不利于程序的维护,可读性很差,一眼看不出其含义。

C 语言中的解决方案

C 语言中,可以使用宏定义的方式解决这个问题:

#define NAME 0
#define AGE  1

也可以使用枚举类型解决:

enum Student{
    NAME,
    AGE,
    SEX,
}

Python 中优雅的解决方案

方案1:定义类似C语言中的枚举类型

这种方法,也就是定义一系列的数值常量


NAME  = 0
AGE   = 1
SEX   = 2
EMAIL = 3
# 或者 NAME, AGE, SEX, EMAIL = xrange(4)

student = ('Airing', 20, 'male', 'airing@ursb.me')

# name 
print student[NAME]

# age
print student[AGE]

# sexprint student[SEX]

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

from collections import namedtuple

# 相当于类的工厂
Student = namedtuple('Student', ['name', 'age', 'sex', 'email'])

# 相当于实例化类对象
s = Student('Airing', 20, 'male', 'airing@ursb.me')

# 也可以使用关键字传参,但是位置需要对应
s2 = Student(name='Jim', age=16, sex='male', email='jim@ursb.me')

# 访问元素相当于访问对象的属性
s.name
s.age
s.sex

# s也是内置类型 tuple 的子类
isinstance(s, tuple)     # => True

是不是优雅方便了许多呢?

相关文章

  • Python 50问 [2]:如何为元组中每个元素命名

    常规场景 先来看一个案例。 学生信息系统中数据为固定格式(姓名,年龄,性别,邮箱地址),学生数据很大为了减小存储开...

  • 随笔

    如何为元组中的每个元素命名,提高程序的可读性?? 学生信息用元组表示.('姓名', '年龄', '性别', '邮箱...

  • Python 进阶(上)

    1、如何在列表、字典、集合中根据条件筛选数据? 列表 字典 集合 2、如何为元组中的每个元素命名,提高程序可读性?...

  • Python高效编程(一)

    实际编程和面试都会遇到的典型问题。 如何在列表,字典,集合中根据条件筛选数据 如何为元组中每个元素命名,提高程序的...

  • 2-2 3 4 命名、统计、字典

    如何为元组中的每个元素命名,提高程序的可读性 如何统计序列中元素出现的频度 某随机序列中,找出出现次数最高的三个元...

  • 如何为元组中的每个元素命名,提高程序可读性?

    如何为元组中的每个元素命名,提高程序可读性?实际案例 学生信息系统中数据为固定格式:(名字,年龄,性别,邮箱地址,...

  • python 如何为 tuple 中每个元素命名?

  • Python中的tuple元组

    Python中的tuple元组 一、访问元组 Python中的元组和列表类似,不同之处在于元组中的元素不能够被修改...

  • python 编程技巧(一)

    如何在字典,列表,集合中 筛选数据 运行在ipython中 常规 filter 列表解析 如何为元组中的每个元素...

  • Python 元组

    Python中,元组的操作与列表相似,不同点是元组是不可变对象,元组中的元素不能修改。 1、定义元组 Python...

网友评论

  • Black先森:抱歉程序员的洁癖问题,你的代码存在问题,你应该没有运行,直接贴上了。
    Stundent = namedtuple('Student', ['name', 'age', 'sex', 'email']) “Stundent”拼写错误

    s2 = Student(name='Jim', age=16, 'male', 'jim@ursb.me')
    代码语法错误,关键词参数不能放在任意参数前面啊,你用的是python的什么版本?
    Airing:@VinctChan python2.7。不好意思,我以后会运行检查一下再贴…生产环境的电脑坏了,昨天是徒手写的代码没有检查…谢谢指出!!

本文标题:Python 50问 [2]:如何为元组中每个元素命名

本文链接:https://www.haomeiwen.com/subject/smikettx.html