对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计算最小优先级队列代码分享
Dec 18 Python
python list排序的两种方法及实例讲解
Mar 20 Python
基于python实现在excel中读取与生成随机数写入excel中
Jan 04 Python
python文件操作之批量修改文件后缀名的方法
Aug 10 Python
基于python读取.mat文件并取出信息
Dec 16 Python
NumPy统计函数的实现方法
Jan 21 Python
Python操作Sqlite正确实现方法解析
Feb 05 Python
Python发送手机动态验证码代码实例
Feb 28 Python
python3注册全局热键的实现
Mar 22 Python
jupyter notebook中新建cell的方法与快捷键操作
Apr 22 Python
python一些性能分析的技巧
Aug 30 Python
python爬虫用scrapy获取影片的实例分析
Nov 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 保留小数点
2009/04/21 PHP
浅谈php扩展imagick
2014/06/02 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
php判断邮箱地址是否存在的方法
2016/02/13 PHP
php 实现进制相互转换
2016/04/07 PHP
通过代码实例解析PHP session工作原理
2020/12/11 PHP
JQuery for与each性能比较分析
2013/05/14 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
JavaScript编写棋盘覆盖代码详解
2017/08/28 Javascript
jQury Ajax使用Token验证身份实例代码
2017/09/22 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
VUE DOM加载后执行自定义事件的方法
2018/09/07 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
webpack的pitching loader详解
2019/09/23 Javascript
jquery实现淡入淡出轮播图效果
2020/12/13 jQuery
python 排列组合之itertools
2013/03/20 Python
Python下的twisted框架入门指引
2015/04/15 Python
Python调用C# Com dll组件实战教程
2017/10/12 Python
Python语言快速上手学习方法
2018/12/14 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
Python3监控疫情的完整代码
2020/02/20 Python
Python-openCV开运算实例
2020/07/05 Python
我的理想演讲稿
2014/04/30 职场文书
北京申奥口号
2014/06/19 职场文书
2014年话务员工作总结
2014/11/19 职场文书
小学班主任心得体会
2016/01/07 职场文书
创业计划书之青年旅馆
2019/09/23 职场文书
python如何读取.mtx文件
2021/04/22 Python
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技
Tomcat 与 maven 的安装与使用教程
2022/06/16 Servers