对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 相关文章推荐
详细介绍Ruby中的正则表达式
Apr 10 Python
利用python发送和接收邮件
Sep 27 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
Jan 24 Python
在java中如何定义一个抽象属性示例详解
Aug 18 Python
pyqt5 使用cv2 显示图片,摄像头的实例
Jun 27 Python
pytorch 更改预训练模型网络结构的方法
Aug 19 Python
Python Pickle 实现在同一个文件中序列化多个对象
Dec 30 Python
python多线程实现代码(模拟银行服务操作流程)
Jan 13 Python
python中文分词库jieba使用方法详解
Feb 11 Python
Python用5行代码实现批量抠图的示例代码
Apr 14 Python
Python类成员继承重写的实现
Sep 16 Python
OpenCV-Python实现怀旧滤镜与连环画滤镜
Jun 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版
2006/10/09 PHP
PHP 解决utf-8和gb2312编码转换问题
2010/03/18 PHP
浅谈php安全性需要注意的几点事项
2014/07/17 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
2014/09/16 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
PHP常用日期加减计算方法实例小结
2018/07/31 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
csdn 批量接受好友邀请
2009/02/19 Javascript
jquery 的 $("#id").html() 无内容的解决方法
2010/06/07 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
2014/07/31 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
JS实现从连接中获取youtube的key实例
2015/07/02 Javascript
使用canvas实现仿新浪微博头像截取上传功能
2015/09/02 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
浅谈vux之x-input使用以及源码解读
2018/11/04 Javascript
JavaScript实现新年倒计时效果
2018/11/17 Javascript
python批量提交沙箱问题实例
2014/10/08 Python
浅谈Python中的闭包
2015/07/08 Python
python套接字流重定向实例汇总
2016/03/03 Python
pygame加载中文名mp3文件出现error
2017/03/31 Python
python获取外网IP并发邮件的实现方法
2017/10/01 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
2019/09/25 Python
Python3如何判断三角形的类型
2020/04/12 Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
2020/08/31 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
德国运动鞋网上商店:Afew Store
2018/01/05 全球购物
Ibatis的核心配置文件都有什么
2014/09/08 面试题
应聘教师推荐信
2013/10/31 职场文书
关于打架的检讨书
2014/01/17 职场文书
座谈会主持词
2014/03/20 职场文书
2016年校长新年寄语
2015/08/17 职场文书
田径运动会广播稿
2015/08/19 职场文书
教你怎么用python爬取爱奇艺热门电影
2021/05/20 Python