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 中迭代器与生成器实例详解
Mar 29 Python
python WindowsError的错误代码详解
Jul 23 Python
Python使用progressbar模块实现的显示进度条功能
May 31 Python
Python中numpy模块常见用法demo实例小结
Mar 16 Python
python Tkinter的图片刷新实例
Jun 14 Python
python频繁写入文件时提速的方法
Jun 26 Python
python基础 range的用法解析
Aug 23 Python
解决python 找不到module的问题
Feb 12 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
Feb 15 Python
Python 日期与时间转换的方法
Aug 01 Python
Python趣味实战之手把手教你实现举牌小人生成器
Jun 07 Python
Python答题卡识别并给出分数的实现代码
Jun 22 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中让上传的文件大小在上传前就受限制的两种解决方法
2013/06/24 PHP
javascript继承之为什么要继承
2012/11/10 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
jQuery实现导航回弹效果
2017/02/27 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
2017/03/13 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
ES6中new Function()语法及应用实例分析
2020/02/19 Javascript
Element Breadcrumb 面包屑的使用方法
2020/07/26 Javascript
跟老齐学Python之坑爹的字符编码
2014/09/28 Python
Python中urllib2模块的8个使用细节分享
2015/01/01 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
2017/11/17 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
python格式化输出保留2位小数的实现方法
2019/07/02 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
用pytorch的nn.Module构造简单全链接层实例
2020/01/14 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
2020/03/10 Python
使用K.function()调试keras操作
2020/06/17 Python
Python调用百度OCR实现图片文字识别的示例代码
2020/07/17 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
2020/10/15 Python
python切割图片的示例
2020/11/12 Python
检测用户浏览器是否支持CSS3的方法
2009/08/29 HTML / CSS
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
有机婴儿毛毯和衣服:Monica + Andy
2020/03/01 全球购物
毕业生多媒体设计求职信
2013/10/12 职场文书
大学生演讲稿范文
2014/01/11 职场文书
美发活动策划书
2014/01/14 职场文书
初三家长会邀请函
2014/01/18 职场文书
优秀党员主要事迹
2014/01/19 职场文书
法制宣传日活动总结
2014/04/29 职场文书
财会专业毕业生自荐信
2014/07/09 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
2016年社会管理综治宣传月活动总结
2016/03/16 职场文书
导游词之峨眉乐山/兵马俑/北京故宫御花园
2019/09/03 职场文书