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

2024-01-21 04:18

本文主要是介绍如何在元组中的每个元素命名,提高程序可读性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实际案例

学生信息系统中数据为固定格式:(名字,年龄,性别,邮箱地址,...)

如:学生数量很大为了减小存储开销,对每个学生信息用元组表示:
('Jim', 16, 'male', 'jim@gmail.com')
('Li', 17, 'male', 'li@163.com')
('Lucy', 16, 'female', 'lucy@qq.com')
...

用 Tuple 的好处

Tuple 比 list 操作速度快。如果您定义了一个值的常量集,并且唯一要用它做的是不断地遍历它,请使用 tuple 代替 list。
如果对不需要修改的数据进行 “写保护”,可以使代码更安全。使用 tuple 而不是 list 如同拥有一个隐含的 assert 语句,说明这一数据是常量。如果必须要改变这些值,则需要执行 tuple 到 list 的转换。
通常我们采用索引的方式访问元组,具体操作如下:

Python
# -*- coding: utf-8 -*- __author__ = 'songhao' st = ('Jim', 16, 'male', 'jim@gmail.com') name = st[0] age = st[1] sex = st[2] email = st[3] print(name, age, sex, email) #Jim 16 male jim@gmail.com # 根据上面的结果依然可以获取st的个人信息,但是对于元组的可读性很低,这是我们通常不愿意使用索引获取元组的原因
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# -*- coding: utf-8 -*-
__author__ = 'songhao'
st = ( 'Jim' , 16 , 'male' , 'jim@gmail.com' )
name = st [ 0 ]
age = st [ 1 ]
sex = st [ 2 ]
email = st [ 3 ]
print ( name , age , sex , email )
#Jim 16 male jim@gmail.com
# 根据上面的结果依然可以获取st的个人信息,但是对于元组的可读性很低,这是我们通常不愿意使用索引获取元组的原因

我们上面是通过索引的方式进行获取个人信息,通过0,1,2,3,4,因为元组的字段是固定的,所以我们可以用赋值的方式

Python
In [1]: NAME,AGE,SEX,EMAIL = range(4) In [2]: NAME,AGE,SEX,EMAIL Out[2]: (0, 1, 2, 3) name = st[NAME] age = st[AGE] sex = st[SEX] email = st[EMAIL] print(name, age, sex, email) # 利用枚举的方式是不是很方便,也增加了可读性呢
1
2
3
4
5
6
7
8
9
10
11
12
13
In [ 1 ] : NAME , AGE , SEX , EMAIL = range ( 4 )
In [ 2 ] : NAME , AGE , SEX , EMAIL
Out [ 2 ] : ( 0 , 1 , 2 , 3 )
name = st [ NAME ]
age = st [ AGE ]
sex = st [ SEX ]
email = st [ EMAIL ]
print ( name , age , sex , email )
# 利用枚举的方式是不是很方便,也增加了可读性呢

还有一种方法,我们可以采用命名元组的方式,
什么是命名元组呢?
namedtuple对象的定义如以下格式:

[code]
collections.namedtuple(typename, field_names, verbose=False, rename=False)

返回一个命名元祖子类typename,其中参数的意义如下:
typename,:此元组的名称;
field_names: 元祖中元素的名称(类似于c结构体中的age等),此字段有多种表达方式,见例子;
rename:如果元素名称中含有python的关键字,则必须设置为rename=True,具体见下面;
verbose:默认就好;

[code]
In [6]: namedtuple?
Signature: namedtuple(typename, field_names, *, verbose=False, rename=False, module=None)
Docstring:
Returns a new subclass of tuple with named fields.

>>> Point = namedtuple('Point', ['x', 'y'])
>>> Point.__doc__ # docstring for the new class
'Point(x, y)'
>>> p = Point(11, y=22) # instantiate with positional args or keywords
>>> p[0] + p[1] # indexable like a plain tuple
33
>>> x, y = p # unpack like a regular tuple
>>> x, y
(11, 22)
>>> p.x + p.y # fields also accessible by name
33
>>> d = p._asdict() # convert to a dictionary
>>> d['x']
11
>>> Point(**d) # convert from a dictionary
Point(x=11, y=22)
>>> p._replace(x=100) # _replace() is like str.replace() but targets named fields
Point(x=100, y=22)

Python
# -*- coding: utf-8 -*- from collections import namedtuple Student = namedtuple('Student', ['name', 'age', 'sex', 'email']) s = Student('Jim', 16, 'male', 'jim@gmail.com') print(s.name, s.age, s.sex, s.email) In [7]: st = Student('songhao',27,'男','admin@168seo.cn') In [8]: st.name Out[8]: 'songhao' In [9]: st.age Out[9]: 27 In [10]: st.sex Out[10]: '男' In [11]: st.email Out[11]: 'admin@168seo.cn'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# -*- coding: utf-8 -*-
from collections import namedtuple
Student = namedtuple ( 'Student' , [ 'name' , 'age' , 'sex' , 'email' ] )
s = Student ( 'Jim' , 16 , 'male' , 'jim@gmail.com' )
print ( s . name , s . age , s . sex , s . email )
In [ 7 ] : st = Student ( 'songhao' , 27 , '男' , 'admin@168seo.cn' )
In [ 8 ] : st . name
Out [ 8 ] : 'songhao'
In [ 9 ] : st . age
Out [ 9 ] : 27
In [ 10 ] : st . sex
Out [ 10 ] : '男'
In [ 11 ] : st . email
Out [ 11 ] : 'admin@168seo.cn'



  • zeropython 微信公众号 5868037 QQ号 5868037@qq.com QQ邮箱

这篇关于如何在元组中的每个元素命名,提高程序可读性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/628345

相关文章

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

Pytorch微调BERT实现命名实体识别

《Pytorch微调BERT实现命名实体识别》命名实体识别(NER)是自然语言处理(NLP)中的一项关键任务,它涉及识别和分类文本中的关键实体,BERT是一种强大的语言表示模型,在各种NLP任务中显著... 目录环境准备加载预训练BERT模型准备数据集标记与对齐微调 BERT最后总结环境准备在继续之前,确

Linux命名管道方式

《Linux命名管道方式》:本文主要介绍Linux命名管道方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、命名管道1、与匿名管道的关系2、工作原理3、系统调用接口4、实现两个进程间通信二、可变参数列表总结一、命名管道1、与匿名管道的关系命名管道由mkf

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

linux如何复制文件夹并重命名

《linux如何复制文件夹并重命名》在Linux系统中,复制文件夹并重命名可以通过使用“cp”和“mv”命令来实现,使用“cp-r”命令可以递归复制整个文件夹及其子文件夹和文件,而使用“mv”命令可以... 目录linux复制文件夹并重命名我们需要使用“cp”命令来复制文件夹我们还可以结合使用“mv”命令总

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi