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简单日志处理类分享
Feb 14 Python
python设计模式大全
Jun 27 Python
Unicode和Python的中文处理
Mar 19 Python
Python字符编码与函数的基本使用方法
Sep 30 Python
python实现用户管理系统
Jan 10 Python
使用Python机器学习降低静态日志噪声
Sep 29 Python
对IPython交互模式下的退出方法详解
Feb 16 Python
Python3实现的简单工资管理系统示例
Mar 12 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
May 08 Python
python如何使用Redis构建分布式锁
Jan 16 Python
pandas DataFrame 数据选取,修改,切片的实现
Apr 24 Python
深入解析NumPy中的Broadcasting广播机制
May 30 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作为数据库? Mysql 创建用户方法
2007/07/02 PHP
关于PHP session 存储方式的详细介绍
2013/06/25 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
php的4种常见运行方式
2015/03/20 PHP
PHP 序列化和反序列化函数实例详解
2020/07/18 PHP
javawscript 三级菜单的实现原理
2009/07/01 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
JavaScript对内存分配及管理机制详细解析
2013/11/11 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
js焦点文字滚动效果代码分享
2015/08/25 Javascript
js实现百度搜索提示框
2017/02/05 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
2017/06/04 Javascript
jquery版轮播图效果和extend扩展
2017/07/18 jQuery
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
vue.js绑定事件监听器示例【基于v-on事件绑定】
2018/07/07 Javascript
深入了解JavaScript 的 WebAssembly
2019/06/15 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
Jquery $.map使用方法实例详解
2020/09/01 jQuery
[45:18]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第一场
2018/04/04 DOTA
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
Python二叉树的镜像转换实现方法示例
2019/03/06 Python
详解python列表(list)的使用技巧及高级操作
2019/08/15 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
2020/03/19 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
2020/05/25 Python
Matplotlib自定义坐标轴刻度的实现示例
2020/06/18 Python
Python调用C/C++的方法解析
2020/08/05 Python
在Python中字典按值排序的实现方法
2020/11/12 Python
马德里著名的运动鞋商店:NOIRFONCE
2019/04/12 全球购物
历史专业个人求职信范文
2013/12/07 职场文书
创新比赛获奖感言
2014/02/13 职场文书
企业安全生产月活动总结
2014/07/05 职场文书
结婚保证书(三从四德)
2015/02/26 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
php字符串倒叙
2021/04/01 PHP
Nginx HTTP跳转至HTTPS
2022/05/15 Servers