星号(*)解包

今天我们来说说在python中经常使用的解包语法,这是python简洁语法的体现之一。在日常处理集合数据时非常有用。按照惯例,我们使用一个个尽可能小的例子来说明。

序列解包到变量

nums=[1,2,3,4]a,b,c,d=nums
  • nums是(指向)一个列表
  • 在等号左边分别用4个变量,即可让列表中的4个值拆解到4个变量中
  • 注意,列表的元素个数与变量的个数必须刚好相等

上面我们分析了最简单的解包,但注意条件"元素数量刚好与变量数量相等",这个条件太坑爹了吧。看下面例子

nums=[1,2,3,4]a,*b=nums
  • 如果我们不希望定义这么多变量来保存拆解的元素,那么我们需要在其中的某个变量前加*,表示这个变量是一个序列
  • 看上图可知,变量b是一个新的list
  • 整个过程相当于,把nums的第一个值给a,然后剩余的以一个list的形式给b

继续更多的例子

nums=[1,2,3,4]*a,b=numsa,b,*c=numsa,*b,c=nums

我就不上示意图了,我想你已经可以看懂了

在方法中定义任意个数的参数

相信大家都知道怎么定义方法,比如

def my_sum(a,b): return a+b

问题是这个方法只能接受2个参数,如果希望可以输入任意个数的参数呢?毕竟有时候需要对多个数字求和。

def my_sum(*arg): return sum(arg)my_sum(1)my_sum(1,2,5,4)
  • 又是星号*,其实这里与上一个例子是一个道理,* + 变量,表示这个变量是一个序列
  • 注意,在上一个例子中,变量的拆包,序列变量得到的是一个list。而这个例子中,序列参数变量得到的是一个元组。

题外话:拆包变量之所以是list,是因为变量后续一般是为了操作他,list是可变的对象。但参数却相反,尽可能包装参数是一个不可变的类型会更安全,至于为什么,请留意后续文章。

到这里已经解决了定义方法的参数个数限制问题,但调用方法的时候还有个不便之处。看下面例子

def my_sum(*arg): return sum(arg)nums=[1,2,3,4]my_sum(nums)
  • 方法的定义没有变化,但现在我们手上直接有一个list
  • 调用my_sum的时候,如果像上面的代码那样直接把nums传给my_sum,那么在my_sum里面的参数arg还是一个元组,那我们给他的list就作为了arg的第一个参数
  • arg是一个元组,里面有一个元素,这个元素是一个指向list的引用(示意图中的下方右边的箭头)。如果真要访问我们传入的list,那就需要arg[0]
  • 注意,现在我们期望的是,传入后,arg是一个包含4个数值的元组,比如(1,2,3,4)

但这个不是定义方法出问题,而是调用方法的时候不对。先来一个坑爹解法。

def my_sum(*arg): return sum(arg)nums=[1,2,3,4]a,b,c,d=numsmy_sum(a,b,c,d)

上面的代码不需要解释了,因为只是用了本文一开始说的原理去做,但太麻烦了,python提供了一种方便的写法,如下

def my_sum(*arg): return sum(arg)nums=[1,2,3,4]my_sum(*nums)
  • 在调用方法,传入参数时,在传入的参数变量前加*,表示拆包。
  • 你可以把这种语法当作是python帮你实现坑爹解法。

总结

本文重点说了3点

  • a,*b,c=nums 变量解包
  • def func(*arg): 任意个数参数
  • func(*nums) 调用方法时解包

notebook pip install 只有星号_每日一点,带你入门Python-星号拆包相关推荐

  1. pip install报错_【Python】pip install django报错

    看完<Python编程从入门到实践>前11章基础语法,鉴于有PHP基础,想直接跳到第18章开始Web应用程序学习,结果跟想象的完全不一样. 比利时的爵士音乐家Django Reinhard ...

  2. 命令行用pip命令安装mysql_使用pip install mysqlclient命令安装mysqlclient失败?(基于Python)...

    我们使用Django.flask等来操作MySQL,实际上底层还是通过Python来操作的.因此我们想要用Django来操作MySQL,首先还是需要安装一个驱动程序.在Python3中,驱动程序有多种 ...

  3. python 制作自己的新闻_【一点资讯】使用 Python 制作属于自己的 PDF 电子书 www.yidianzixun.com...

    之前介绍过一篇如何将 PDF 转换为图片的文章(点击这里查看),今天分享的则是如何将 HTML 保存为 PDF. 熟练利用好这招,可以试着自己把精品网页内容做成 PDF 电子书. 作者:taceywo ...

  4. python人脸识别防小偷_一篇文章带你了解Python 人脸识别有多简单

    今天的Python学习教程给大家介绍一个世界上最简练的人脸辨认库 face_recognition,你可以应用 Python 和命令行工具进行提取.辨认.操作人脸. 基于业内领先的 C++ 开源库 d ...

  5. python人脸识别实验报告总结_一篇文章带你了解Python 人脸识别有多简单

    原标题:一篇文章带你了解Python 人脸识别有多简单 今天的Python学习教程给大家介绍一个世界上最简洁的人脸识别库 face_recognition,你可以使用 Python 和命令行工具进行提 ...

  6. notebook pip install 只有星号_只有给淘宝店铺精准打标,才能“快速获得优质流量”...

    大家好,简要的自我介绍一下吧~我是少有的淘宝女运营 很多的新手卖家一直在抱怨自己的店铺没有流量,没有转化,抱怨赚不到钱,本篇来揭秘为什么现在店铺这么难转化? (有的卖家是在2015年之前开店的,在20 ...

  7. notebook pip install 只有星号_意境深厚的感悟短语,通透走心,让人深有感触|未来|人世间|想要|只有你...

    一 * 人生就像打太极拳,贪多嚼不烂,太快走不远:只有一招一式慢慢磨练,日后才能行云流水酣畅淋漓! 二 * 你要学会捂上自己的耳朵,不去听那些熙熙攘攘的声音.这个世界上没有不苦的人,真正能治愈自己的, ...

  8. notebook pip install 只有星号_什么人不能种生基?什么人适合于做?只有这篇文章最清楚了!...

    什么人不能种生基?什么人适合于做?只有这篇文章最清楚了! 李道长为您提供专业的八字命 理 宝宝起名 运势升旺 风水气场调理 道法改运 还阴债 开财门 补财库 和合术 择吉日 生基 超度祖先 超拔婴灵等 ...

  9. notebook pip install 只有星号_世界上最小的船,只有四个红细胞那么长

    原标题:世界上最小的船,只有四个红细胞那么长 欢迎收看一周科技.运用现代技术,研究者们把微雕玩出了新境界--最新作品是只有30微米长的3D打印小船. 珊瑚高塔 最近,澳大利亚研究者在大堡礁北端发现了一 ...

最新文章

  1. 设计模式C++实现(9)——享元模式
  2. MySQL大数据量分页查询方法及其优化
  3. node包管理器npm常用命令
  4. ICON素材|装饰图标设计的技巧
  5. linux 后台运行_Linux系统后台运行应用三板斧
  6. 查询mysql数据库中所有表名
  7. [转载] python执行shell命令的几种方法
  8. 区块链 solana TPS吞吐率
  9. JAVA 基础之 多线程
  10. 手机打开电脑端网页_网站建设要把电脑端手机端都做好
  11. 怎么创建java项目?新建java项目的步骤
  12. win10系统问题记录(一):解决D/E盘根目录出现的msdia80.dll文件
  13. 计算机表格函数最大值操作,使用MAX最大值函数计算excel表格中学生成绩的最大值...
  14. element-ui el-descriptions取消冒号
  15. mysql dcn_Tdsql DCN同步技术原理介绍
  16. MATLAB算法实战应用案例精讲-【智能优化算法】天牛须搜索-BAS (附MATLAB、C++以及Python源码)
  17. window用户切换
  18. 电子邮件链接格式html主题,HTML的电子邮件链接标签mailto用法详解
  19. 2021-06-24CTF-攻防世界-WEB新手练习区(12题入门题)
  20. 竟然有删不了的文件夹?

热门文章

  1. session实现购物系统的简例和application实现统计页面访问次数的简例
  2. php 不同数据库的调用方法,php连接不同数据库的几种方法
  3. 用汇编的眼光看C++(之指针2)
  4. Python学习之路(一)字符串
  5. oracle时分秒修改值_Oracle SQL Developer显示的时间包含时分秒的设置方法
  6. python用户登录(输入用户名和密码)dic_Python使用装饰器模拟用户登陆验证功能示例...
  7. dba 权限_DBA如何玩转PG用户、角色和权限管理?
  8. html radio 去掉圆点,html radio默认选中,去除选中
  9. java eclipse svn_[Java教程]Eclipse 安装 SVN 的在线插件
  10. linux java占用199%,linux分区使用率过高又查询不到被哪些文件占用的问题