对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如何统计序列中元素
Jul 31 Python
Python利用Django如何写restful api接口详解
Jun 08 Python
对python:循环定义多个变量的实例详解
Jan 20 Python
Python常用特殊方法实例总结
Mar 22 Python
Python中将两个或多个list合成一个list的方法小结
May 12 Python
计算机二级python学习教程(1) 教大家如何学习python
May 16 Python
Python实现通过解析域名获取ip地址的方法分析
May 17 Python
python实现对列表中的元素进行倒序打印
Nov 23 Python
django自定义非主键自增字段类型详解(auto increment field)
Mar 30 Python
为什么是 Python -m
Jun 19 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 Python
TensorFlow保存TensorBoard图像操作
Jun 23 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 syntax error, unexpected $end 错误的一种原因及解决
2008/10/25 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
2015/03/25 PHP
php文件下载处理方法分析
2015/04/22 PHP
PHP引用的调用方法分析
2016/04/25 PHP
php 一维数组的循环遍历实现代码
2017/04/10 PHP
在thinkphp5.0路径中实现去除index.php的方式
2019/10/16 PHP
JQuery动态创建DOM、表单元素的实现代码
2011/08/09 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
动态加载脚本提升javascript性能
2014/02/24 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
Jquery数字上下滚动动态切换插件
2015/08/08 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
2020/09/01 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
jQuery实现的表格展开伸缩效果实例
2016/09/07 Javascript
js中利用cookie实现记住密码功能
2020/08/20 Javascript
js Canvas实现的日历时钟案例分享
2016/12/25 Javascript
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
Vue路由管理器Vue-router的使用方法详解
2020/02/05 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
2020/04/28 Javascript
JS forEach跳出循环2种实现方法
2020/06/24 Javascript
使用python编写监听端
2018/04/12 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
python的命名规则知识点总结
2019/10/04 Python
Python-jenkins 获取job构建信息方式
2020/05/12 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
品质主管岗位职责
2014/03/16 职场文书
3的组成教学反思
2014/04/30 职场文书
学习经验交流会演讲稿
2015/11/02 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
情况说明书格式及范文
2019/06/24 职场文书
Redis延迟队列和分布式延迟队列的简答实现
2021/05/13 Redis
Golang bufio详细讲解
2022/04/21 Golang
Valheim服务器 Mod修改安装教程 【ValheimPlus】
2022/12/24 Servers