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中的二进制位运算符
May 13 Python
Python实现破解12306图片验证码的方法分析
Dec 29 Python
python 保存float类型的小数的位数方法
Oct 17 Python
使用Django开发简单接口实现文章增删改查
May 09 Python
python super用法及原理详解
Jan 20 Python
Python单元测试模块doctest的具体使用
Feb 10 Python
关于Keras Dense层整理
May 21 Python
keras中的卷积层&amp;池化层的用法
May 22 Python
Pytorch GPU内存占用很高,但是利用率很低如何解决
Jun 01 Python
Python中的xlrd模块使用整理
Jun 15 Python
python 网络编程要点总结
Jun 18 Python
Python 数据可视化之Bokeh详解
Nov 02 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原理之异常机制
2010/08/21 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
PHP最常用的正则表达式
2017/02/13 PHP
JS 建立对象的方法
2007/04/21 Javascript
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
javascript检查表单数据是否改变的方法
2013/07/30 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
2013/11/12 Javascript
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
vue弹窗消息组件的使用方法
2020/09/24 Javascript
JavaScript引用类型之基本包装类型实例分析【Boolean、Number和String】
2018/08/09 Javascript
Vue.js实现数据响应的方法
2018/08/13 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
2020/03/12 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
使用Python生成url短链接的方法
2015/05/04 Python
Python 多线程Threading初学教程
2017/08/22 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
谈谈Python中的while循环语句
2019/03/10 Python
Python3使用TCP编写一个简易的文件下载器功能
2019/05/08 Python
python实现kNN算法识别手写体数字的示例代码
2019/08/16 Python
Python如何使用字符打印照片
2020/01/03 Python
windows下python安装pip方法详解
2020/02/10 Python
Python参数传递及收集机制原理解析
2020/06/05 Python
施工资料员的岗位职责
2013/12/22 职场文书
自我反省检讨书
2014/01/23 职场文书
社区庆八一活动方案
2014/02/02 职场文书
个人充满哲理的自我评价
2014/02/20 职场文书
劳动工资科岗位职责范本
2014/03/02 职场文书
环保志愿者活动方案
2014/08/14 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
Mongodb 迁移数据块的流程介绍分析
2022/04/18 MongoDB
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript