python的一些骚套路,学会这些让你高效编程,文末有资料赠送

本文详细介绍了Python中序列解压与打包的高级用法,包括如何将元组、列表、字符串等序列中的元素赋值给多个变量,以及如何处理元素个数与变量个数不一致的情况。同时,讲解了Python库代码中使用*args接收多个变量的原理。

No.1

解压序列赋值给多个变量

问题

一个包含 N 个元素的元组或者是列表,怎么才能容易的把里面的元素一次性赋值给几个变量

解决方案

任何的序列(或者是可迭代对象)可以用的赋值语句自动赋值给多个变量。但是要保证元素个数和变量个数相同。

代码示例:

>>> a = (4, 5)
>>> a1, a2 = a
>>> a1
4
>>> a2
5
>>>
>>> b = [ 'Ac', 1, 2, (3, 4, 5) ]
>>> b1, b2, b3, b4 = b
>>> b1
'Ac'
>>> b4 
(3, 4, 5)
>>> b1, b2, b3, (b4_1, b4_2, b4_3) = b
>>> b1
'Ac'
>>> b2
1
>>> b4_1
3
>>> b4_2
4
>>>

元素个数和变量个数不一致的话,会抛出异常

代码示例:

>>> a = (4, 5)
>>> a1, a2, a3 = a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 2 values to unpack
>>>

事实上,这种解压列表、元组的方式还适用于字符串、迭代器、生成器等。

代码示例:

>>> a = 'Hello'
>>> a1, a2, a3, a4, a5 = a
>>> a1
'H'
>>> a2
'e'

有些时候,我们并不关心所有的数据,仅仅需要其中一部分数据,我们可以用_作为变量名,接受我们并不需要的数据。

代码示例:

>>> b = [ 'Ac', 1, 2, (3, 4, 5) ]
>>> _, b1, b2, _ = b
>>> b1
1
>>> b2
2

No.2

解压可迭代对象赋值给多个变量

问题

当元素个数与变量个数不一致的时候,会抛出一个 ValueError 。这个时候该怎么解决呢?

解决方案

现在我们开始接触python高阶用法里面的一个最基础的知识----拆包装包语法

>>>a, *b = [1,2,3]
>>>a
1
>>>b
[2, 3]

这里原本是两个元素赋值给一个元素,是非法操作,但是通过一个*号,把他们进行装包,放入b列表。

同样,有时候,你想解压一些不需要的元素,你不能简单就使用 * , 但是你可以使用一个普通的废弃名称,比如 _ 或者 ign (ignore)。

代码示例:

>>> a = ('ac', 1, 2, (3, 4, 5))
>>> a1, *_, (*_, a2) = a
>>> a1
'ac'
>>> a2
5
>>>

要注意的是,许多python库代码的形参都会使用 *args接受变量,这个用途实际上类似于java的构造函数,能接受任意多个变量,这也是python的强大之处。

def run(a,*args):
    #第一个参数传给了a
    print(a)
    # args是一个元组,里面是2和3两个参数
    print(args)
    # *args是将这个元组中的元素依次取出来
    print("对args拆包")
    print(*args) # *args 相当于 a,b = args
    print("将未拆包的数据传给run1")
    run1(args)
    print("将拆包后的数据传给run1")
    run1(*args)
 
def run1(*args):
    print("输出元组")
    print(args)
    print("对元组进行拆包")
    print(*args)
 
run(1,2,3) #后面的2和3

上述代码的结果为:

1
(2, 3)
对args拆包
2 3
将未拆包的数据传给run1
输出元组
((2, 3),)
对元组进行拆包
(2, 3)
将拆包后的数据传给run1
输出元组
(2, 3)
对元组进行拆包
2 3

这段代码很容易被绕晕,抓住这几点:

1.形参中的args其实真正接收数据的args,它是一个元组,把传进来的数据放在了args这个元组中。
2. 函数体里的args依然是那个元组,但是
args的含义就是把元组中的数据进行拆包,也就是把元组中的数据拆成单个数据。
3. 对于args这个元组,如果不对其进行解包,就将其作为实参传给其它以*args作为形参的函数时,args这个元组会看看作一个整体,作为一个类型为元组的数据传入。

今天的内容到此为止,后续有更加精彩的python小知识的文章更新,欢迎阅读。

对您能有哪怕一点帮助,就是我坚持写下去的动力。

在这里插入图片描述

扫码关注我

微信公众号: 暮秋梵星

后台回复:“深度学习”,获取亚马逊李沐大神的动手学习深度学习电子书,以及配套代码

内容概要:本文介绍了一个关于三相桥式全控整流及有源逆变电路的实验仿真模型,重点研究三相整流器与逆变器在Simulink环境下的建模与仿真技术。内容涵盖电力电子变换器的工作原理、控制策略设计、系统动态响应分析,并进一步扩展至10kV配电网中不同中性点接地方式(中性点不接地、经小电阻接地、经消弧线圈接地)下的单相、两相短路接地及相间短路故障的仿真研究,全面呈现了电力系统典型故障的暂态特性。此外,文档还整合了丰富的科研资源,涵盖电力系统优化、新能源并网、故障诊断、微电网调度等多个前沿方向,充分体现了Matlab/Simulink在电气工程仿真中的核心地位和广泛应用价值。; 适合人群:电气工程、自动化、电力电子等相关专业的高校学生、科研人员及工程技术人员,具备一定的电路理论基础和仿真软件操作经验者更佳。; 使用场景及目标:①用于教学实验中帮助理解三相整流与逆变电路的工作机制;②支撑科研项目中对电力系统故障特性的建模与分析;③作为开发新型控制算法(如PWM控制、低电压穿越等)的仿真验证平台;④辅助完成毕业设计、课题研究或工程方案评估; 阅读建议:此资源以Simulink仿真实现为核心,强调理论与实践结合,建议读者在学习过程中同步搭建模型,动手调试参数,深入理解各模块功能与系统整体行为,同时可参考文中提供的完整资源链接拓展研究视野。
内容概要:本文介绍了一个关于风光制氢合成氨系统优化研究的论文复现资源,依托Cplex求解器在Matlab环境中实现系统建模与求解。该资源聚焦于新能源耦合系统,涵盖风能、太阳能发电制氢,并进一步合成氨的全流程能量管理与优化调度,通过数学建模与优化算法实现系统经济性与运行效率的最大化。内容不仅包括风光出力不确定性处理、电解水制氢、氢气储存与转化、氨合成工艺等关键环节的建模,还整合了多种智能优化算法与电力系统调度策略,如二阶锥规划、多目标优化与需求响应机制,旨在为科研人员提供一套完整的综合能源系统优化研究框架与代码实现范例。; 适合人群:具备一定电力系统、优化理论及Matlab编程基础的研究生、科研人员及工程技术人员,尤其适合从事新能源系统优化、综合能源系统规划、氢能与氨能转化等前沿方向的研究者。; 使用场景及目标:① 复现高水平期刊论文中的风光制氢合成氨系统优化模型,掌握Cplex在Matlab中的建模与求解流程;② 学习并应用二阶锥规划、多目标优化、需求响应等先进优化方法于综合能源系统科研项目中;③ 借助提供的完整Matlab代码案例,快速搭建仿真环境,加速科研进程,提升学术创新能力与工程实践水平。; 阅读建议:此资源以科研复现为核心,强调理论与实践深度融合,建议读者在学习过程中结合文档中的代码实例,逐步调试与理解模型构建逻辑,并尝试进行参数调整与模型拓展,以深化对综合能源系统多能耦合与优化调度机制的理解与应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值