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警察与小偷的实现之一客户端与服务端通信实例
Oct 09 Python
Python使用xlrd读取Excel格式文件的方法
Mar 10 Python
对于Python中RawString的理解介绍
Jul 07 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
Sep 26 Python
Python实现控制台中的进度条功能代码
Dec 22 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
Apr 25 Python
Python3 列表,数组,矩阵的相互转换的方法示例
Aug 05 Python
Django框架 Pagination分页实现代码实例
Sep 04 Python
Python正则表达式学习小例子
Mar 03 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
Oct 12 Python
Python包管理工具pip的15 个使用小技巧
May 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 MYSQL中插入当前时间
2008/04/06 PHP
php数组函数序列之array_splice() - 在数组任意位置插入元素
2011/11/07 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
javascript下4个跨浏览器必备的函数
2010/03/07 Javascript
基于jquery的图片懒加载js
2010/06/30 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
jquery获取tr并更改tr内容示例代码
2014/02/13 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
2015/12/09 Javascript
详解iframe与frame的区别
2016/01/13 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
js实现的在线调色板功能完整实例
2016/12/21 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
微信小程序之蓝牙的链接
2017/09/26 Javascript
vue中echarts3.0自适应的方法
2018/02/26 Javascript
Vue实现手机扫描二维码预览页面效果
2020/05/28 Javascript
Vue中watch、computed、updated三者的区别及用法
2020/07/27 Javascript
php使用递归与迭代实现快速排序示例
2014/01/23 Python
python操作xml文件详细介绍
2014/06/09 Python
使用Python脚本将文字转换为图片的实例分享
2015/08/29 Python
python 计算文件的md5值实例
2017/01/13 Python
Python的log日志功能及设置方法
2019/07/11 Python
Django Rest framework频率原理与限制
2019/07/26 Python
Python 使用 environs 库定义环境变量的方法
2020/02/25 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
keras实现图像预处理并生成一个generator的案例
2020/06/17 Python
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
厨师长岗位职责
2014/03/02 职场文书
国旗下的演讲稿
2014/05/08 职场文书
图书室标语
2014/06/21 职场文书
2014年高三班主任工作总结
2014/12/05 职场文书
春晚观后感
2015/06/11 职场文书
《静夜思》教学反思
2016/02/17 职场文书