Python基础教程:为元组中的每一个元素命名
1.原因:
当存储一个学生信息的时候使用字典是十分方便的,例如下面这样:
student = {'name' : "小明",'sex' : 'Man','tel' : '123456','score' : 100,'address' : 'xxxx'
}
因为这样可以很直观的显示出一个学生的各个信息,但是当有很多学生的时候使用元组是不是可以更简单呢?我们只需要将所有的元组元素使用相同的排列方式,例如:
s1 = ('小明', 'Man', '123456', 100, 'xxxx')
第一个元素表示名字,第二个元素表示性别,第三个元素表示电话号码,第四个元素表示分数,第五个元素表示地址.最重要的是在存储的时候元组占用的存储空间比字典少.所以当有大量数据的时候使用元组会节省大量的空间.
但是这样的话就会出现一个问题:在访问元组属性上的时候我们使用类似于s1[0],s1[2]……这些我们自己知道表示的是姓名和电话号码,但是其他阅读你代码的人知道吗?所以我们可以给元组的元素命名,这样的话就能十分直观的让阅读代码的人知道我们调用的是哪一个“属性”.
2.方法一:使用collections.namedtuple代替内置的tuple
话不多说,我们直接上代码:
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 导入namedtuple
from collections import namedtuple
# 创建一个学生“类”,名字叫student
student = namedtuple('stduent', ['name', 'sex', 'tel', 'score', 'address'])
# 创建一个namedtuple对象
s = student('小明', 'Man', '123456', 100, 'xxxx')
# 查看创建的对象
print(s)
# 判断对象的类型是不是tuple
print(isinstance(s, tuple))
# 尝试使用字典的方式调用对象属性
print(s.name)
print(s.sex)
print(s.tel)
print(s.score)
print(s.address)
注释:
新的访问namedtupyle元素的方式不再是以前的s[0],s[1]……而是在对象后面更属性名(这也是为什么我喜欢称他们为类,对象,和属性)
输出结果:
stduent(name='小明', sex='Man', tel='123456', score=100, address='xxxx')
True
小明
Man
123456
100
xxxx
3.方法二:使用枚举类型:
原本的元组可读性差的原因在于不知道元素顺序表示的含义的时候很难通过数字判断,所以我们可以使用枚举类型来代替原本属性调用时候的数字.
具体请看代码:
#导入整数枚举
from enum import IntEnum
#创建整数枚举类型
class st(IntEnum):name = 0sex = 1tel = 2score = 3address = 4
s = ('小明', 'Man', '123456', 100, 'xxxx')
#元素调用
print(s[st.name], s[st.sex], s[st.address], s[st.tel], s[st.score], s[st.address])
输出:
小明 Man xxxx 123456 100 xxxx
这也算是一种很直观的方式了,还有一种更简单粗暴的,那就是只给让那些数字拥有意义:创建变量name = 0,sex = 1………但是我为什么没有讲,我聪明如你只需要稍加思考就知道为啥了.
Python基础教程:为元组中的每一个元素命名相关推荐
- Python基础教程:元组详细使用
元组 元组和列表类似,但属于不可变序列,元组一旦创建,用任何方法都不可修改其元素. 元组的定义方式和列表相同,但定义时所有元素是放在一对圆括号"()"中,而不是方括号中. 1.元组 ...
- python基础教程:两个list之间移动元素
首先我们先了解一下list的几个常用函数: a = [123,456,"tony","jack"]#list中增加元素 a.append("www&q ...
- Python基础教程:字符串中split与rsplit的方法原理教程
1.描述 split()方法通过指定分隔符对字符串进行切片,如果参数num有指定值,则分隔num+1个子字符串,默认分隔符为所有空字符,包括空格.换行(\n).制表符(\t)等 rstrip()方法通 ...
- Python基础教程:json中load和loads区别
相同点 dump 和 dumps 都实现了序列化 load 和 loads 都实现反序列化 变量从内存中变成可存储或传输的过程称之为序列化 序列化是将对象状态转化为可保存或可传输格式的过程. 变量内容 ...
- Python基础教程:list中的append()和extend()方法区别
一.append()和extend()方法都是用来添加数据到list末尾的,两者的区别: append()添加的时候会把添加的数据当成一个整体进行添加,允许添加任意类型的数据 extend()添加的时 ...
- python 为什么元组中只包含一个元素时,需要在元素后面添加逗号?(消除歧义)
为什么要写成这样呢? tup1=(50,) 目的:消除歧义,如: a = (1) # <class 'int'> print(type(a))b = (1,) print(type(b)) ...
- python print 输出到txt_(Python基础教程之七)Python字符串操作
Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...
- python字符串_(Python基础教程之七)Python字符串操作
Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...
- Python基础教程-菜鸟教程学习笔记1
Python基础教程-菜鸟教程学习笔记1 文章目录 Python基础教程-菜鸟教程学习笔记1 前言 Python 简介 1. 第一个Python程序 2. Python 中文编码 3. 基本语法 1) ...
最新文章
- PyTorch 安装和基本运算— Tensor 的数据类型(浮点型、整型、随机浮点型等)、基本运算(绝对值、求和、裁剪、求商、求积、求幂等)、Tensor 与 Numpy 转换
- 将图像转换为8位单通道_数字图像存储
- eclipse format的时候如何让@param后不换行
- RD自身修养 满招损谦受益
- AJAX与SQL Server(一)
- hdu 2149 巴什博弈
- 利用react-router实现按需加载、登录验证、刷新组件。。。
- 修复ext4日志(jbd2)bug( Ext4 文件系统有以下 Bug)
- 菜鸟学python-基础(2)
- IPD与项目管理、CMM的关系
- Linux 符号链接与 inode
- QT 用QAudio语音库实现音频信号的采集 以及发送到另一台电脑 播放
- numpy—np.random.multivariate_normal
- python做一个http接口测试框架
- magicdraw 2022x
- Linux上:使用VMware17安装Centos8.5并配置网络、WSL安装Ubuntu、
- 第一部分 数理逻辑 第三章 命题逻辑的推理理论
- 武汉地铁站点最短路径搜索的实现(一)——Dijkstra算法(C++ coding)
- 小程序配置服务器域名
- android 微信 openid,android 微信登陆手把手教学获取openid
热门文章
- 6、 restful API
- CAS权属线粗细修改
- 3720: Gty的妹子树
- Mina框架项目运用
- 动态规划 HDOJ2602-Bone Collector-01背包
- reactive programming 1.5 monads
- Android NDK: WARNING: APP_PLATFORM android-9 is larger than android:minSdkVersion问题
- Android 拍照是开启(调用)闪光灯(原创)
- 随手小记:快速适应未必是个好策略
- cac会议投稿难度大吗_发表 SCI 论文有多难?