对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如何为图片添加水印
Nov 25 Python
Django框架多表查询实例分析
Jul 04 Python
django开发post接口简单案例,获取参数值的方法
Dec 11 Python
Python3.4解释器用法简单示例
Mar 22 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
Apr 27 Python
计算机二级python学习教程(1) 教大家如何学习python
May 16 Python
Python3.8中使用f-strings调试
May 22 Python
python字典一键多值实例代码分享
Jun 14 Python
python字符串格式化方式解析
Oct 19 Python
如何以Winsows Service方式运行JupyterLab
Aug 30 Python
python爬虫爬取网页数据并解析数据
Sep 18 Python
python 读取串口数据的示例
Nov 09 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 如何利用phpexcel导入数据库
2013/08/24 PHP
php实现可运算的验证码
2015/11/10 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
ie 调试javascript的工具
2009/04/29 Javascript
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
什么是JavaScript
2009/08/13 Javascript
js 为label标签和div标签赋值的方法
2013/08/08 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
2014/01/10 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
Node.js使用gm拼装sprite图片
2017/07/04 Javascript
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
2018/01/24 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
2018/03/05 Javascript
vue axios整合使用全攻略
2018/05/24 Javascript
webpack手动配置React开发环境的步骤
2018/07/02 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
python提取页面内url列表的方法
2015/05/25 Python
KMP算法精解及其Python版的代码示例
2016/06/01 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
python对list中的每个元素进行某种操作的方法
2018/06/29 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
python钉钉机器人运维脚本监控实例
2019/02/20 Python
python3使用matplotlib绘制条形图
2020/03/25 Python
python递归法解决棋盘分割问题
2019/07/17 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
澳大利亚领先的内衣店:Bendon Lingerie澳大利亚
2020/05/15 全球购物
初中地理教学反思
2014/01/11 职场文书
见习期自我鉴定范文
2014/03/19 职场文书
2014年售票员工作总结
2014/11/19 职场文书
个人催款函范文
2015/06/24 职场文书
职工趣味运动会开幕词
2016/03/04 职场文书