对Python3 * 和 ** 运算符详解


Posted in Python onFebruary 16, 2019

在 Python 中,* 和 ** 具有语法多义性,具体来说是有四类用法。

1. 算数运算

* 代表乘法

** 代表乘方

>>> 2 * 5
10
>>> 2 ** 5
32

2. 函数形参

*args 和 **kwargs 主要用于函数定义。

你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。 *(星号) 才是必须的. 你也可以写成 *ar 和 **k 。而写成 *args 和**kwargs 只是一个通俗的命名约定。

python函数传递参数的方式有两种:

位置参数(positional argument)

关键词参数(keyword argument)

*args 与 **kwargs 的区别,两者都是 python 中的可变参数:

*args 表示任何多个无名参数,它本质是一个 tuple

**kwargs 表示关键字参数,它本质上是一个 dict

如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。

>>> def fun(*args, **kwargs):
...  print('args=', args)
...  print('kwargs=', kwargs)
... 
>>> fun(1, 2, 3, 4, A='a', B='b', C='c', D='d')
args= (1, 2, 3, 4)
kwargs= {'A': 'a', 'B': 'b', 'C': 'c', 'D': 'd'}

使用 *args

>>> def fun(name, *args):
...  print('你好:', name)
...  for i in args:
...   print("你的宠物有:", i)
... 
>>> fun("Geek", "dog", "cat")
你好: Geek
你的宠物有: dog
你的宠物有: cat

使用 **kwargs

>>> def fun(**kwargs):
...  for key, value in kwargs.items():
...   print("{0} 喜欢 {1}".format(key, value))
... 
>>> fun(Geek="cat", cat="box")
Geek 喜欢 cat
cat 喜欢 box

3. 函数实参

如果函数的形参是定长参数,也可以使用 *args 和 **kwargs 调用函数,类似对元组和字典进行解引用:

>>> def fun(data1, data2, data3):
...  print("data1: ", data1)
...  print("data2: ", data2)
...  print("data3: ", data3)
... 
>>> args = ("one", 2, 3)
>>> fun(*args)
data1: one
data2: 2
data3: 3
>>> kwargs = {"data3": "one", "data2": 2, "data1": 3}
>>> fun(**kwargs)
data1: 3
data2: 2
data3: one

4. 序列解包

序列解包 往期博客有写过,这里只列出一个例子,序列解包没有 **。

>>> a, b, *c = 0, 1, 2, 3 
>>> a 
0 
>>> b 
1 
>>> c 
[2, 3]

以上这篇对Python3 * 和 ** 运算符详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python保存MongoDB上的文件到本地的方法
Mar 16 Python
python 数据的清理行为实例详解
Jul 12 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
Jul 20 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
Jun 04 Python
python中itertools模块zip_longest函数详解
Jun 12 Python
基于python纯函数实现井字棋游戏
May 27 Python
Django微信小程序后台开发教程的实现
Jun 03 Python
python Scrapy框架原理解析
Jan 04 Python
解决pytorch 的state_dict()拷贝问题
Mar 03 Python
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
Jun 09 Python
Python实现文字pdf转换图片pdf效果
Apr 03 Python
python神经网络ResNet50模型
May 06 Python
Python docx库用法示例分析
Feb 16 #Python
Python中整数的缓存机制讲解
Feb 16 #Python
Python实现的爬取百度文库功能示例
Feb 16 #Python
对Python3 序列解包详解
Feb 16 #Python
对Python3 pyc 文件的使用详解
Feb 16 #Python
Python父目录、子目录的相互调用方法
Feb 16 #Python
python 获得任意路径下的文件及其根目录的方法
Feb 16 #Python
You might like
PHP开发过程中常用函数收藏
2009/12/14 PHP
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
php实现有趣的人品测试程序实例
2015/06/08 PHP
PHP命名空间namespace及use的简单用法分析
2018/08/03 PHP
jQuery自动切换/点击切换选项卡效果的小例子
2013/08/12 Javascript
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
2016/11/25 Javascript
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
2018/05/17 Javascript
IE9 elementUI文件上传的问题解决
2018/10/17 Javascript
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
Django实现的自定义访问日志模块示例
2017/06/23 Python
python实现逆序输出一个数字的示例讲解
2018/06/25 Python
Python DataFrame一列拆成多列以及一行拆成多行
2019/08/06 Python
安装Pycharm2019以及配置anconda教程的方法步骤
2019/11/11 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
Python 多进程、多线程效率对比
2020/11/19 Python
Yves Rocher伊夫·黎雪美国官网:法国始创植物美肌1959
2019/01/09 全球购物
本科生详细的自我评价
2013/09/19 职场文书
十佳文明家庭事迹
2014/05/25 职场文书
2014年初中班主任工作总结
2014/11/08 职场文书
先进班集体事迹材料
2014/12/25 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
公司门卫岗位职责
2015/04/13 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
JavaScript中关于预编译、作用域链和闭包的理解
2021/03/31 Javascript
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python
微信小程序结合ThinkPHP5授权登陆后获取手机号
2021/11/23 PHP