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 19 Python
python实现泊松图像融合
Jul 26 Python
python f-string式格式化听语音流程讲解
Jun 18 Python
基于sklearn实现Bagging算法(python)
Jul 11 Python
python爬虫 2019中国好声音评论爬取过程解析
Aug 26 Python
如何在python中写hive脚本
Nov 08 Python
如何在mac下配置python虚拟环境
Jul 06 Python
Python使用sys.exc_info()方法获取异常信息
Jul 23 Python
python speech模块的使用方法
Sep 09 Python
python 爬取B站原视频的实例代码
Sep 09 Python
Manjaro、pip、conda更换国内源的方法
Nov 17 Python
Python可视化学习之seaborn调色盘
Feb 24 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
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
workerman结合laravel开发在线聊天应用的示例代码
2018/10/30 PHP
javascript 有用的脚本函数
2009/05/07 Javascript
javascript 面向对象编程 万物皆对象
2009/09/17 Javascript
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
jQuery数组处理方法汇总
2011/06/20 Javascript
jQuery.each使用详解
2015/07/07 Javascript
jQuery实现为控件添加水印文字效果(附源码)
2015/12/02 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
2016/06/07 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
TypeScript入门-接口
2017/03/30 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
php简单数据库操作类的封装
2017/06/08 Javascript
JavaScript原型继承_动力节点Java学院整理
2017/06/30 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
2017/09/06 Javascript
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
小程序ios音频播放没声音问题的解决
2018/07/11 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
python 判断自定义对象类型
2009/03/21 Python
python append、extend与insert的区别
2016/10/13 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
2018/03/22 Python
sublime python3 输入换行不结束的方法
2018/04/19 Python
在Python中使用Neo4j的方法
2019/03/14 Python
Python csv文件的读写操作实例详解
2019/11/19 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
serialVersionUID具有什么样的特征
2014/02/20 面试题
思想汇报范文
2013/11/04 职场文书
我的中国梦演讲稿高中篇
2014/08/19 职场文书
领导欢送会主持词
2015/07/06 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python
教你nginx跳转配置的四种方式
2022/07/07 Servers