对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查找指定具有相同内容文件的方法
Jun 28 Python
小白如何入门Python? 制作一个网站为例
Mar 06 Python
matplotlib 纵坐标轴显示数据值的实例
May 25 Python
Python同步遍历多个列表的示例
Feb 19 Python
如何使用Python标准库进行性能测试
Jun 25 Python
python pandas时序处理相关功能详解
Jul 03 Python
Python正则表达式匹配日期与时间的方法
Jul 07 Python
详解Python是如何实现issubclass的
Jul 24 Python
python3 批量获取对应端口服务的实例
Jul 25 Python
利用ImageAI库只需几行python代码实现目标检测
Aug 09 Python
Python整数与Numpy数据溢出问题解决
Sep 11 Python
Python安装Bs4的多种方法
Nov 28 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 Google的translate API代码
2008/12/10 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
php基于PDO实现功能强大的MYSQL封装类实例
2017/02/27 PHP
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
2010/04/01 Javascript
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
jquery动态加载select下拉框示例代码
2013/12/10 Javascript
javascript中tostring()和valueof()的用法及两者的区别
2015/11/16 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
webpack4 SCSS提取和懒加载的示例
2018/09/03 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
2019/04/28 Javascript
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
Python实现从URL地址提取文件名的方法
2015/05/15 Python
Python编程之属性和方法实例详解
2015/05/19 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
python+POP3实现批量下载邮件附件
2018/06/19 Python
Python实现快速傅里叶变换的方法(FFT)
2018/07/21 Python
详解Python用户登录接口的方法
2019/04/17 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
一款基于css3的动画按钮代码教程
2014/11/23 HTML / CSS
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
周生生珠宝香港官网:Chow Sang Sang(香港及海外配送)
2019/09/05 全球购物
小车司机岗位职责
2013/11/25 职场文书
行政部岗位职责范本
2014/03/13 职场文书
竞聘上岗演讲
2014/05/19 职场文书
竞赛口号大全
2014/06/16 职场文书
山东省召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
公务员检讨书
2014/11/01 职场文书
2014年教学管理工作总结
2014/12/02 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
企业催款函范本
2015/06/24 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书