fluent python笔记——元组

本文深入探讨了Python中元组的多种高级应用技巧,包括元组拆包、嵌套拆包、具名元组的使用及其特性等。通过具体示例讲解如何利用这些特性提高编程效率。
元组

有很多人会将元组看作不可变的列表,这完全忽略了元组的巨大作用。

元组是对数据的记录,正是因为它不可变的特性,让它成为记录数据的强大工具。一个元组对应着一条数据,一条数据包含多个元素。我们通过元素独一无二的位置来获取我们需要的信息。


1. 元组拆包
  • 平行赋值
person = ('fancy', 18, 'cute')
name, age, dis = person     # 拆包赋值
print(name, age, dis)

person = ['fancy', 18, 'cute']  # 对于其他可迭代对象同样适用
name, age, dis = person
print(name, age, dis).  

# 实际上为绑定变量地址到元组相应元素地址上
# 但是改变变量内容,不会影响元组(变量地址改变)  
  • %适配
person = ('fancy', 18, 'cute')
print('%s %d %s' % person)   # %拆包
  • *适配
print(divmod(20, 3))

num = (20, 3)
print(divmod(*num))   # *拆包

num = [20, 3]
print(divmod(*num))   # 对于其他可迭代序列同样适用
  • 不使用中间变量互换
name1 = 'fancy'
name2 = 'sixday'
name1, name2 = name2, name1    # 互换值
print(name1, name2)

# 交换地址
# 同样适用于序列
  • 处理不需要的元素
person = ('fancy', 18, 'cute')
name, _, dis = person           # 占位符 _
  • 用*处理剩下的元素

    python中,用*args处理剩下的元素是很常见的做法。

tup = ('fancy', 2018, 7 , 30, 'cute')
name, *date, dis = tup
print(date)

>>>[2018, 7, 30]
2. 嵌套元组拆包
tup = ('fancy', (2018,7,30), 'cute')
a, (y,m,d), c = tup
print(y,m,d)

>>>2018 7 30
3. 具名元组

元组作为数据的记录,只能通过下标来获取数据,而不能通过字段名来获取对应数据,是不是很难受呢?具名元组为我们解决了这一问题。

实际上,具名元组是 有字段名 的元组,只是它会生成一个只有属性没有方法的新类型,有些像C语言中结构体的定义。

具名元组类的实例所消耗的内存,与元组是一样的,因为字段名都被存在对应的类里。并且不会以__dict__存放类的属性,因此与一般的类实例相比,占内存也会小很多。

  • collections.namedtuple
  • 函数原型namedtuple(typename, field_names[, verbose=False][, rename=False])
  • 返回类型:定义的新类型
  • typename:类名,string类型
  • field_names: 字段名,可以是由空格分开的字符串,也可以是由字符串组成的可迭代序列
  • verbose:vervose=True,创建类之前在输出台打印类的定义
  • rename:rename=True,对field_names中无效的字段进行替换,根据位置进行替换。
Cls = collections.namedtuple('Cls', 'name tel age')
fancy = Cls('fancy', '1111', 8)

print(fancy.name)    # 通过标签访问
print(fancy[1])      # 通过下标访问

Cls = collections.namedtuple(
            'Cls', ['def', 'cute', '123'], 
            verbose=True, rename=True)

['_0', 'cute', '_1']   # 被替换之后的字段名

除去从tuple继承而来的属性之外,namedtuple还有自己的几个特殊属性。

  • 类属性_fields
# 类属性_fields 给出所有字段名
Cls = collections.namedtuple('Cls', 'name tel age')
fancy = Cls('fancy', '1111', 8)

print(Cls._fields)
print(fancy._fields)

>>>('name', 'tel', 'age')
>>>('name', 'tel', 'age')
  • 类方法_make(iterable)
# 类方法_make(iterable) 用一个可迭代对象构造类的实例
# 原本是以传多个参数来构造的,也可以同元组一样传可迭代对象构造

Cls = collections.namedtuple('Cls', 'name tel age')
fancy = ('fancy', '1111', 8)
obj = Cls._make(fancy) # 相当于 obj = Cls(*fancy)
内容概要:本文设计了一种基于PLC的全自动洗衣机控制系统内容概要:本文设计了一种,采用三菱FX基于PLC的全自动洗衣机控制系统,采用3U-32MT型PLC作为三菱FX3U核心控制器,替代传统继-32MT电器控制方式,提升了型PLC作为系统的稳定性与自动化核心控制器,替代水平。系统具备传统继电器控制方式高/低水,实现洗衣机工作位选择、柔和过程的自动化控制/标准洗衣模式切换。系统具备高、暂停加衣、低水位选择、手动脱水及和柔和、标准两种蜂鸣提示等功能洗衣模式,支持,通过GX Works2软件编写梯形图程序,实现进洗衣过程中暂停添加水、洗涤、排水衣物,并增加了手动脱水功能和、脱水等工序蜂鸣器提示的自动循环控制功能,提升了使用的,并引入MCGS组便捷性与灵活性态软件实现人机交互界面监控。控制系统通过GX。硬件设计包括 Works2软件进行主电路、PLC接梯形图编程线与关键元,完成了启动、进水器件选型,软件、正反转洗涤部分完成I/O分配、排水、脱、逻辑流程规划水等工序的逻辑及各功能模块梯设计,并实现了大形图编程。循环与小循环的嵌; 适合人群:自动化套控制流程。此外、电气工程及相关,还利用MCGS组态软件构建专业本科学生,具备PL了人机交互C基础知识和梯界面,实现对洗衣机形图编程能力的运行状态的监控与操作。整体设计涵盖了初级工程技术人员。硬件选型、; 使用场景及目标:I/O分配、电路接线、程序逻辑设计及组①掌握PLC在态监控等多个方面家电自动化控制中的应用方法;②学习,体现了PLC在工业自动化控制中的高效全自动洗衣机控制系统的性与可靠性。;软硬件设计流程 适合人群:电气;③实践工程、自动化及相关MCGS组态软件与PLC的专业的本科生、初级通信与联调工程技术人员以及从事;④完成PLC控制系统开发毕业设计或工业的学习者;具备控制类项目开发参考一定PLC基础知识。; 阅读和梯形图建议:建议结合三菱编程能力的人员GX Works2仿真更为适宜。; 使用场景及目标:①应用于环境与MCGS组态平台进行程序高校毕业设计或调试与运行验证课程项目,帮助学生掌握PLC控制系统的设计,重点关注I/O分配逻辑、梯形图与实现方法;②为工业自动化领域互锁机制及循环控制结构的设计中类似家电控制系统的开发提供参考方案;③思路,深入理解PL通过实际案例理解C在实际工程项目PLC在电机中的应用全过程。控制、时间循环、互锁保护、手动干预等方面的应用逻辑。; 阅读建议:建议结合三菱GX Works2编程软件和MCGS组态软件同步实践,重点理解梯形图程序中各环节的时序逻辑与互锁机制,关注I/O分配与硬件接线的对应关系,并尝试在仿真环境中调试程序以加深对全自动洗衣机控制流程的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值