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程序的循环的运行效率的原因
Apr 01 Python
Python计算字符宽度的方法
Jun 14 Python
python抓取并保存html页面时乱码问题的解决方法
Jul 01 Python
python生成不重复随机数和对list乱序的解决方法
Apr 09 Python
对PyQt5中的菜单栏和工具栏实例详解
Jun 20 Python
PyTorch实现更新部分网络,其他不更新
Dec 31 Python
IntelliJ 中配置 Anaconda的过程图解
Jun 01 Python
keras 解决加载lstm+crf模型出错的问题
Jun 10 Python
使用Keras实现简单线性回归模型操作
Jun 12 Python
Python移位密码、仿射变换解密实例代码
Jun 27 Python
Python实现滑雪小游戏
Sep 25 Python
Python使用openpyxl模块处理Excel文件
Jun 05 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
德生BCL3000的电路分析和打磨
2021/03/02 无线电
php mssql 时间格式问题
2009/01/13 PHP
php判断对象是派生自哪个类的方法
2015/06/20 PHP
PHP变量赋值、代入给JavaScript中的变量
2015/06/29 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
php-fpm超时时间设置request_terminate_timeout资源问题分析
2019/09/27 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
HTTP状态代码以及定义(解释)
2007/02/02 Javascript
javascript的console.log()用法小结
2012/05/31 Javascript
全面理解面向对象的 JavaScript(来自ibm)
2013/11/10 Javascript
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
JavaScript中的ParseInt(&quot;08&quot;)和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
Vue中图片Src使用变量的方法
2019/10/30 Javascript
解决vue项目运行npm run serve报错的问题
2020/10/26 Javascript
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
浅析使用Python操作文件
2017/07/31 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
Python 查看文件的读写权限方法
2018/01/23 Python
ubuntu系统下使用pm2设置nodejs开机自启动的方法
2018/05/12 NodeJs
详解python实现识别手写MNIST数字集的程序
2018/08/03 Python
对dataframe数据之间求补集的实例详解
2019/01/30 Python
python滑块验证码的破解实现
2019/11/10 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
Pytorch实现基于CharRNN的文本分类与生成示例
2020/01/08 Python
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
六月份红领巾广播稿
2014/02/03 职场文书
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
植树节口号
2014/06/21 职场文书
武夷山导游词
2015/02/03 职场文书
论文答辩开场白大全
2015/05/27 职场文书
会计试用期工作总结2015
2015/05/28 职场文书
opencv-python图像配准(匹配和叠加)的实现
2021/06/23 Python