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

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

相关文章

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

键盘快捷键:提高工作效率与电脑操作的利器

键盘快捷键:提高工作效率与电脑操作的利器 在数字化时代,键盘快捷键成为了提高工作效率和优化电脑操作的重要工具。无论是日常办公、图像编辑、编程开发,还是游戏娱乐,掌握键盘快捷键都能带来极大的便利。本文将详细介绍键盘快捷键的概念、重要性、以及在不同应用场景中的具体应用。 什么是键盘快捷键? 键盘快捷键,也称为热键或快捷键,是指通过按下键盘上的一组键来完成特定命令或操作的方式。这些快捷键通常涉及同

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

如何提高 GitHub 的下载速度

如何提高 GitHub 的下载速度 文章目录 如何提高 GitHub 的下载速度1. 注册账号2. 准备好链接3. 创建仓库4. 在码云上下载代码5. 仓库更新了怎么办 一般来说,国内的朋友从 GitHub 上面下载代码,速度最大是 20KB/s,这种龟速,谁能忍受呢? 本文介绍一种方法——利用“码云”,可以大大提高下载速度,亲测有效。 1. 注册账号 去“码云”注册一

这些心智程序你安装了吗?

原文题目:《为什么聪明人也会做蠢事(四)》 心智程序 大脑有两个特征导致人类不够理性,一个是处理信息方面的缺陷,一个是心智程序出了问题。前者可以称为“认知吝啬鬼”,前几篇文章已经讨论了。本期主要讲心智程序这个方面。 心智程序这一概念由哈佛大学认知科学家大卫•帕金斯提出,指个体可以从记忆中提取出的规则、知识、程序和策略,以辅助我们决策判断和解决问题。如果把人脑比喻成计算机,那心智程序就是人脑的

遮罩,在指定元素上进行遮罩

废话不多说,直接上代码: ps:依赖 jquer.js 1.首先,定义一个 Overlay.js  代码如下: /*遮罩 Overlay js 对象*/function Overlay(options){//{targetId:'',viewHtml:'',viewWidth:'',viewHeight:''}try{this.state=false;//遮罩状态 true 激活,f