python 星号(*)的多种用途


Posted in Python onSeptember 21, 2020

结论

概括的来说,就是对修饰的变量进行拆分, 对修饰的形式参数进行参数聚集。
单*号,将被修饰的变量按元素方式拆分, 对修饰的形式参数进行参数聚集。
双**号,将被修饰的变量按键值对进行拆分, 对修饰的形式参数进行参数聚集。

修饰实例变量时

  • 作用: 讲被修饰的实例变量或者可迭代对象进行拆分
def func3(a, b, c):
  print("param a is {}, param b is {}, param c is {}".format(a, b, c))


if __name__ == '__main__':
  arr1 = [1, 2, 3]
  print(arr1, sep='\t') # [1, 2, 3]\t 正常输出
  print(*arr1, sep='\t') # 1\t2\t3 每个数字中间以\t分割

  arr2 = [[1, 2, 3], [3, 4, 5], [5, 6, 7]]
  print(list(zip(*arr2))) # [(1, 3, 5), (2, 4, 6), (3, 5, 7)] 二维数组的行转列

  dictionary = {'a': 1, 'b': 2, 'c': 3}
  print(dictionary, sep='\t') # {'a': 1, 'b': 2, 'c': 3}\t 正常输出
  print(*dictionary, sep='\t') # a\tb\tc\t 每个字母中间以\t分割


  print(func3(**dictionary)) # param a is 1, param b is 2, param c is 3

比较使用和不使用*号后产生的结果就可以发现,单*号将可迭代对象进行了拆分,按单个元素方式依次将数据传进方法。
配合其他方法使用可以优雅的完成矩阵的行转列操作。

双**号的使用,是将变量对象拆分成键值对的形式,所以只有dict类型可以使用。
注意上面的func3,他需要三个形参,但是我们只传入**dict_obj, 就完成了功能。

可迭代对象有:list, dict, tuple, generator, iterator

出现在方法的形式参数位置

  • 作用: 放在参数列表的末尾, 作为不定长的参数列表的形参接受对象。 (可以类比Java的可变参数列表)
def func1(*args):
  print("type", type(args)) # type <class 'tuple'>
  print("all arguments: ", args) # all arguments: (1, 2, 3)
  print("second argument: ", args[1]) # second argument: 2


def func2(**kw):
  print("type", type(kw)) # type <class 'dict'>
  print("all arguments: ", kw) # all arguments: {'a': 1, 'b': 2, 'c': 3}
  print("second argument: ", kw['a']) # second argument: 1


if __name__ == '__main__':
  a, b, c = 1, 2, 3

  func1(a, b, c)
  func2(a=a, b=b, c=c)

尽管函数func1的形参只有一个,但被传递三个参数,程序还是可以正常运行。
因为*args将三个参数以tuple形式存储,作为一个整体传递给方法func1。

同理,func2的**kw形参将传入的三个参数压成一个dict进行使用。

具体实验代码可以通过Github获得。

以上就是python 星号(*)的多种用途的详细内容,更多关于python 星号(*)的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
用Python创建声明性迷你语言的教程
Apr 13 Python
python中的字典使用分享
Jul 31 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
Mar 12 Python
对numpy 数组和矩阵的乘法的进一步理解
Apr 04 Python
python中in在list和dict中查找效率的对比分析
May 04 Python
python利用微信公众号实现报警功能
Jun 10 Python
Python实现的knn算法示例
Jun 14 Python
python爬虫获取百度首页内容教学
Dec 23 Python
tensorflow的计算图总结
Jan 12 Python
Python如何基于Tesseract实现识别文字功能
Jun 05 Python
如何用python免费看美剧
Aug 11 Python
简述python Scrapy框架
Aug 17 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
Sep 21 #Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
Sep 21 #Python
python map比for循环快在哪
Sep 21 #Python
通过实例解析Python文件操作实现步骤
Sep 21 #Python
python Paramiko使用示例
Sep 21 #Python
Python引入多个模块及包的概念过程解析
Sep 21 #Python
python 偷懒技巧——使用 keyboard 录制键盘事件
Sep 21 #Python
You might like
在PHP中使用XML
2006/10/09 PHP
php常用的url处理函数总结
2014/11/19 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
刷新页面实现方式总结(HTML,ASP,JS)
2008/11/13 Javascript
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
2010/06/28 Javascript
js加载之使用DOM方法动态加载Javascript文件
2013/11/08 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
轻松学习jQuery插件EasyUI EasyUI创建RSS Feed阅读器
2015/11/30 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
nodejs个人博客开发第六步 数据分页
2017/04/12 NodeJs
JS关于刷新页面的相关总结
2018/05/09 Javascript
jquery登录的异步验证操作示例
2019/05/09 jQuery
微信小程序绘制图片发送朋友圈
2019/07/25 Javascript
Node.js系列之安装配置与基本使用(1)
2019/08/30 Javascript
世界上最短的数字判断js代码
2019/09/09 Javascript
vue中音频wavesurfer.js的使用方法
2020/02/20 Vue.js
微信小程序收藏功能的实现代码
2020/06/19 Javascript
[01:08:09]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第二局
2016/03/02 DOTA
Python中用于检查英文字母大写的isupper()方法
2015/05/19 Python
Python 中pandas.read_excel详细介绍
2017/06/23 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
python发送告警邮件脚本
2018/09/17 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
2019/05/27 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
django model通过字典更新数据实例
2020/04/01 Python
CSS3动画和HTML5新特性详解
2020/08/31 HTML / CSS
财务管理专业推荐信
2013/11/19 职场文书
建筑人员岗位职责
2013/12/25 职场文书
好矿嫂事迹材料
2014/01/21 职场文书
影子教师研修方案
2014/06/14 职场文书
中秋手机店促销方案
2014/06/16 职场文书
索赔员岗位职责
2015/02/15 职场文书
2015年学校安全管理工作总结
2015/05/11 职场文书