对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教程之用py2exe将PY文件转成EXE文件
Jun 12 Python
深入分析在Python模块顶层运行的代码引起的一个Bug
Jul 04 Python
python字典DICT类型合并详解
Aug 17 Python
Python iter()函数用法实例分析
Mar 17 Python
基于Python中numpy数组的合并实例讲解
Apr 04 Python
解决Python安装后pip不能用的问题
Jun 12 Python
对python xlrd读取datetime类型数据的方法详解
Dec 26 Python
基于python生成器封装的协程类
Mar 20 Python
python遍历文件目录、批量处理同类文件
Aug 31 Python
Windows10+anacond+GPU+pytorch安装详细过程
Mar 24 Python
python动态规划算法实例详解
Nov 22 Python
python实现简单倒计时功能
Apr 21 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
声音就能俘获人心,蕾姆,是哪个漂亮小姐姐配音呢?
2020/03/03 日漫
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
PHP与C#分别格式化文件大小的代码
2011/05/14 PHP
动态加载iframe
2006/06/16 Javascript
一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子
2009/05/21 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
jQuery如何防止这种冒泡事件发生
2015/02/27 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
js中new一个对象的过程
2017/02/20 Javascript
security.js实现的RSA加密功能示例
2018/06/06 Javascript
命令行批量截图Node脚本示例代码
2019/01/25 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
2019/04/23 Javascript
js利用iframe实现选项卡效果
2020/08/09 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
初步理解Python进程的信号通讯
2015/04/09 Python
python获取本地计算机名字的方法
2015/04/29 Python
Python导出数据到Excel可读取的CSV文件的方法
2015/05/12 Python
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
2018/05/26 Python
python opencv实现图像边缘检测
2019/04/29 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
HTML5 input新增type属性color颜色拾取器的实例代码
2018/08/27 HTML / CSS
英国工具中心:UK Tool Centre
2017/07/10 全球购物
GWT的应用有哪两种部署模式
2012/12/21 面试题
师范生实习个人的自我评价
2013/09/28 职场文书
三个儿子教学反思
2014/02/03 职场文书
技能竞赛活动方案
2014/02/21 职场文书
事业单位考核材料
2014/05/21 职场文书
关于运动会的广播稿
2014/09/22 职场文书
如何通过一篇文章了解Python中的生成器
2022/04/02 Python