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 greenlet实现原理和使用示例
Sep 24 Python
Python2.7简单连接与操作MySQL的方法
Apr 27 Python
Python与人工神经网络:使用神经网络识别手写图像介绍
Dec 19 Python
PyQt5每天必学之弹出消息框
Apr 19 Python
django将图片上传数据库后在前端显式的方法
May 25 Python
python调用虹软2.0第三版的具体使用
Feb 22 Python
python中对_init_的理解及实例解析
Oct 11 Python
pygame库实现俄罗斯方块小游戏
Oct 29 Python
Python使用Pandas读写Excel实例解析
Nov 19 Python
python 函数嵌套及多函数共同运行知识点讲解
Mar 03 Python
PyQt5 如何让界面和逻辑分离的方法
Mar 24 Python
Pyhton模块和包相关知识总结
May 12 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采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
使用javascript:将其它类型值转换成布尔类型值的解决方法详解
2013/05/07 Javascript
javascript四舍五入函数代码分享(保留后几位)
2013/12/10 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
深入分析jquery解析json数据
2014/12/09 Javascript
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
2016/02/02 Javascript
10个JavaScript中易犯小错误
2016/02/14 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
vue页面切换过渡transition效果
2018/10/08 Javascript
Vuex新手的理解与使用详解
2019/05/31 Javascript
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
使用Python多线程爬虫爬取电影天堂资源
2016/09/23 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
python pygame模块编写飞机大战
2018/11/20 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
python+OpenCV实现图像拼接
2020/03/05 Python
django xadmin 管理器常用显示设置方式
2020/03/11 Python
python如何调用百度识图api
2020/09/29 Python
python3从网络摄像机解析mjpeg http流的示例
2020/11/13 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
python 基于UDP协议套接字通信的实现
2021/01/22 Python
Easy Spirit官网:美国休闲鞋履中的代表品牌
2019/04/12 全球购物
演讲稿开场白
2014/01/13 职场文书
校运动会广播稿300字
2014/10/07 职场文书
酒店前台岗位职责
2015/04/16 职场文书
2015年人力资源部工作总结
2015/04/30 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
返乡农民工证明
2015/06/24 职场文书