对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 15 Python
常见的python正则用法实例讲解
Jun 21 Python
在Python中使用AOP实现Redis缓存示例
Jul 11 Python
查看django版本的方法分享
May 14 Python
Python面向对象之继承和组合用法实例分析
Aug 27 Python
Python实现求两个数组交集的方法示例
Feb 23 Python
python中如何使用分步式进程计算详解
Mar 22 Python
python处理document文档保留原样式
Sep 23 Python
python 利用已有Ner模型进行数据清洗合并代码
Dec 24 Python
Python Numpy库常见用法入门教程
Jan 16 Python
python如何随机生成高强度密码
Aug 19 Python
python+pytest接口自动化之token关联登录的实现
Apr 06 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替换超长文本中的特殊字符的函数代码
2012/05/22 PHP
php连接与操作PostgreSQL数据库的方法
2014/12/25 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
php中实现用数组妩媚地生成要执行的sql语句
2015/07/10 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
PHP单例模式定义与使用实例详解
2017/02/06 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
Jquery 插件学习实例1 插件制作说明与tableUI优化
2010/04/02 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
2016/12/07 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
Vue + Vue-router 同名路由切换数据不更新的方法
2017/11/20 Javascript
jQuery实现网页拼图游戏
2020/04/22 jQuery
微信小程序日历组件使用方法详解
2018/12/29 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
微信小程序实现列表的横向滑动方式
2020/07/15 Javascript
[20:21]《一刀刀一天》第十六期:TI国际邀请赛正式打响,总奖金超过550万
2014/05/23 DOTA
[03:49]DOTA2 2015国际邀请赛中国区预选赛第二日现场百态
2015/05/27 DOTA
Python中的多重装饰器
2015/04/11 Python
基于Python的关键字监控及告警
2017/07/06 Python
python递归函数绘制分形树的方法
2018/06/22 Python
python 循环读取txt文档 并转换成csv的方法
2018/10/26 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
如何卸载python插件
2020/07/08 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
2021/02/24 Python
美国知名保健品网站:LuckyVitamin(支持中文)
2017/08/09 全球购物
六十大寿答谢词
2014/01/12 职场文书
就业协议书怎么填
2014/04/11 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
校车安全管理责任书
2015/05/11 职场文书
学校财务管理制度
2015/08/04 职场文书
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android