对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制作检测Linux运行信息的工具的教程
Apr 01 Python
python对指定目录下文件进行批量重命名的方法
Apr 18 Python
利用Python实现Windows下的鼠标键盘模拟的实例代码
Jul 13 Python
Python爬虫PyQuery库基本用法入门教程
Aug 04 Python
解决PyCharm同目录下导入模块会报错的问题
Oct 13 Python
python绘制地震散点图
Jun 18 Python
Python实现RGB与HSI颜色空间的互换方式
Nov 27 Python
Python面向对象封装操作案例详解
Dec 31 Python
jupyter notebook中新建cell的方法与快捷键操作
Apr 22 Python
python 使用事件对象asyncio.Event来同步协程的操作
May 04 Python
让你相见恨晚的十个Python骚操作
Nov 18 Python
Elasticsearch 索引操作和增删改查
Apr 19 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中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
php中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
php采集中国代理服务器网的方法
2015/06/16 PHP
Symfony实现行为和模板中取得request参数的方法
2016/03/17 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
2016/12/14 PHP
thinkPHP5.0框架URL访问方法详解
2017/03/18 PHP
Mootools 1.2教程 选项卡效果(Tabs)
2009/09/15 Javascript
原创javascript小游戏实现代码
2010/08/19 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
JS实现页面超时后自动跳转到登陆页面
2015/01/19 Javascript
浅谈javascript的分号的使用
2015/05/12 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
基于Bootstrap table组件实现多层表头的实例代码
2017/09/07 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
jQuery实现轮播图及其原理详解
2020/04/12 jQuery
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
Vue中inheritAttrs的使用实例详解
2020/12/31 Vue.js
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python下singleton模式的实现方法
2014/07/16 Python
python并发和异步编程实例
2018/11/15 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
Django框架使用mysql视图操作示例
2019/05/15 Python
Python利用WMI实现ping命令的例子
2019/08/14 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
2019/11/30 Python
Django框架配置mysql数据库实现过程
2020/04/22 Python
Python异常处理机制结构实例解析
2020/07/23 Python
用CSS3的box-reflect来制作倒影效果
2016/11/15 HTML / CSS
澳大利亚拥有最好的家具和家居用品在线目的地:Nestz
2019/02/23 全球购物
优秀老员工获奖感言
2014/02/15 职场文书
承诺函格式模板
2015/01/21 职场文书
感谢信的技巧及范例
2019/05/15 职场文书
python实现A*寻路算法
2021/06/13 Python