对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 13 Python
Python解析最简单的验证码
Jan 07 Python
python列表的常用操作方法小结
May 21 Python
用yum安装MySQLdb模块的步骤方法
Dec 15 Python
pandas将DataFrame的列变成行索引的方法
Apr 10 Python
Python运维开发之psutil库的使用详解
Oct 18 Python
10 分钟快速入门 Python3的教程
Jan 29 Python
Pyqt QImage 与 np array 转换方法
Jun 27 Python
python nmap实现端口扫描器教程
May 28 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
Mar 30 Python
Django与pyecharts结合的实例代码
May 13 Python
pygame面向对象的飞行小鸟实现(Flappy bird)
Apr 01 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实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
PHP资源管理框架Assetic简介
2014/06/12 PHP
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
jQuery中map()方法用法实例
2015/01/06 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
JavaScript必知必会(五) eval 的使用
2016/06/08 Javascript
封装获取dom元素的简单实例
2016/07/08 Javascript
jquery实现网页定位导航
2016/08/23 Javascript
JQuery 获取Dom元素的实例讲解
2017/07/08 jQuery
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
JavaScript学习笔记之数组基本操作示例
2019/01/09 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
在实例中重学JavaScript事件循环
2020/12/03 Javascript
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
[01:16]DOTA2小知识课堂 Ep.03 芒果树无伤肉山
2019/12/05 DOTA
使用Python的Flask框架来搭建第一个Web应用程序
2016/06/04 Python
分数霸榜! python助你微信跳一跳拿高分
2018/01/08 Python
Python线性回归实战分析
2018/02/01 Python
Python标准库笔记struct模块的使用
2018/02/22 Python
Python3 单行多行万能正则匹配方法
2019/01/07 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
全球最大的瓷器、水晶和银器零售商:Replacements
2020/06/15 全球购物
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
临床医学专业学生的自我评价分享
2013/11/21 职场文书
爱护公共设施倡议书
2014/08/29 职场文书
领导班子整改方案
2014/10/25 职场文书
2014年双拥工作总结
2014/11/21 职场文书
工商局个人工作总结
2015/03/03 职场文书
2015-2016年小学教导工作总结
2015/07/21 职场文书
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers