常用数据结构-namedtuple(命名元祖)
namedtuple从根本上来说是一个带有数据名称的元祖。它包含元祖的所有特性,但也有一些元祖没有的额外特性。使用namedtuple可以很容易创建轻量级对象类型。
namedtuple将是你的代码更加具有python特色。
- 访问数据
使用namedtuple访问数据可以提高代码的可读性。如果想创建一个类,使其值在初始化后不会被更改。可以创建一个类:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
point = Point(3, 4)
point.x
point.y
使用namedtuple可以更加提高代码可读性:
Point = namedtuple("Point", ['x', 'y'])
point = Point(x=3, y=4)
point.x
point.y
无论是否被命名,元祖都是不可变的。namedtuple通过使用名称访问而不是索引访问,使访问数据更加方便。
namedtuple还有一个严格的限制,即字段名必须是字符串。此外,namedtuple不执行任何散列操作。
- 返回数据
使用元祖返回数据使代码在没有太多上下文的情况更具有可读性。当数据从一个函数传递到另一个函数时,应该考虑是否可以使用namedtuple。
def get_user_info(user_obj):
user = get_data_from_db(user_obj)
first_name = user.get('first_name')
last_name = user.get('last_name')
age = user.get('age')
return (first_name, last_name, age)
def get_full_name(first_name, last_name):
return first_name + last_name
first_name, last_name, age = get_user_info(user_obj)
full_name = get_full_name(first_name, last_name)
使用namedtuple:
def get_user_info(user_obj):
user = get_data_from_db(user_obj)
UserInfo = namedtuple('UserInfo', ['first_name', 'last_name', 'age'])
user_info = UserInfo(first_name=user.get('first_name'),
last_name=user.get('last_name'),
age=user.get('age'))
return user_info
def get_full_name(user_info):
return ''.join(user_info.first_name, user_info.last_name)
user_info = get_user_info(user_obj)
full_name = get_full_name(user_info)
使用namedtuple编写代码会给出上下文,而不需要再代码中提供额外的信息。user_info作为namedtuple给出了额外的上下文,而没有
在函数get_user_info中返回时显示设置。因此,使用namedtuple可以使代码在长期运行状态下更加具有可读性合可维护性。
在认为对象表示法会时代码更符合python风格和更具备可读性的地方,即应该使用namedtuple,而不是tuple;当有多个值需要在上下文传递时,
可以优先考虑使用namedtuple,可使代码可读性更强。
常用数据结构-namedtuple(命名元祖)的更多相关文章
- Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)
Counter(计数器) 是一个字典的子类,存储形式同样为字典,其中存储的键为字典的元素,值为元素出现的次数,在使用之前我们需要先导入文件 import collections 初始化一个计数器 im ...
- 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)
Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuq ...
- Python说文解字_看起来有点儿像字典的元组(命名元祖)
1. 需要一个库 namedtuple: 所谓命名元组就是对于元组的每一个元素进行起名,看起来很像访问字典一样. 实例 from collections import namedtuple Stock ...
- Python 可命名元祖
import collections MytupleClass = collections.namedtuple('MytupleClass',['x','y','z']) obj = Mytuple ...
- 【Python基础学习五】列表,元祖,字典
1.列表(list) 列表是Python的一种内置数据类型,list是一种有序的集合,可以随时添加和删除其中的元素,就像动态数组一样.获取list中的元素用角标获取,角标可以使用正角标,也可以使用负角 ...
- python学习第六讲,python中的数据类型,列表,元祖,字典,之列表使用与介绍
目录 python学习第六讲,python中的数据类型,列表,元祖,字典,之列表使用与介绍. 二丶列表,其它语言称为数组 1.列表的定义,以及语法 2.列表的使用,以及常用方法. 3.列表的常用操作 ...
- Python基础-列表、元祖、字典、字符串
列表和分组 序列概览: 数据结构是通过某种方式组织在一起的数据元素的集合.这些元素可以是数字.字符,甚至可以是其他数据结构. 在python中,最基本的数据结构是序列(sequence). 序列中的每 ...
- Python学习记录4-列表、元祖和集合
list列表 一组由有序数据组成的序列 数据有先后顺序 数据可以不是一类数据 list的创建 直接创建,用中括号创建,内容直接用英文逗号隔开 使用list创建 列表包含单个字符串的时候是一个特例 # ...
- Python--数据类型与变量(列表、元祖、字典)
今天我们来看Python中3种內建的数据结构:列表.元祖和字典 列表 定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素特性:1.可存放多个值2.可修改指定索引位置对应的值,可变 ...
随机推荐
- Lua table(表)
table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组.字典等. Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil. Lua ta ...
- Linux知识点笔记
Linux启动脚本 rcS文件,rcS文件位于系统根目录下的"/etc/init.d"下. rcS文件本质是一个bash shell脚本,因此遵循bash脚本的语法规则. [1] ...
- 故意使用free掉的内存的一个实验( 常量区/栈)
故意使用free掉的内存的一个实验 考虑一下两种声明 struct stuff{ char home[10]; int num; char name[10]; }; struct stuff{ cha ...
- 整理requests和正则表达式爬取猫眼Top100中遇到的问题及解决方案
最近看崔庆才老师的爬虫课程,第一个实战课程是requests和正则表达式爬取猫眼电影Top100榜单.虽然理解崔老师每一步代码的实现过程,但自己敲代码的时候还是遇到了不少问题: 问题1:获取respo ...
- 028 01 Android 零基础入门 01 Java基础语法 03 Java运算符 08 逻辑“或”运算符
028 01 Android 零基础入门 01 Java基础语法 03 Java运算符 08 逻辑"或"运算符 本文知识点:Java中的逻辑"或"运算符 逻辑& ...
- matlab中upper 将字符串转换为大写
参考:https://ww2.mathworks.cn/help/matlab/ref/fprintf.html?searchHighlight=fprintf&s_tid=doc_srcht ...
- OneWire总线的Arduino库函数
OneWire总线基本点 One-wire总线是DALLAS公司研制开发的一种协议,采用单根信号线,既传输时钟,又传输数据而且数据传输是双向的.它具有节省I/O 口线资源.结构简单.成本低廉.便于总线 ...
- 使用Appium进行iOS的真机自动化测试
windows不支持appium连接ios,只适用于mac 使用Appium进行iOS的真机自动化测试 安装类库 Homebrew 如果没有安装过Homebrew,先安装[ homebrew ] np ...
- 获取Jetbrain全家桶激活码
支持正版,本KEY仅用于体验软件 激活码 激活码一: 2GCA2ZHNKP-eyJsaWNlbnNlSWQiOiIyR0NBMlpITktQIiwibGljZW5zZWVOYW1lIjoi5r+A5r ...
- 在Linux命令行内的大小写转换
在编辑文本时大小写常常是需要注意的地方,大小写的转换是很枯燥而繁琐的工作,所幸,Linux 提供了很多能让这份工作变得容易的命令.接下来让我们看看都有哪些完成大小写转换的命令. tr 命令 tr (t ...