Python关键字及可变参数*args,**kw原理解析


Posted in Python onApril 04, 2020

可变参数

顾名思义,函数的可变参数是传入的参数可以变化的,1个,2个到任意个。当然可以将这些 参数封装成一个 list 或者 tuple 传入,但不够 pythonic。使用可变参数可以很好解决该问题,注意可变参数在函数定义不能出现在特定参数和默认参数前面,因为可变参数会吞噬掉这些参数。

def report(name, *grades):
  total_grade = 0
  for grade in grades:
    total_grade += grade
  print(name, 'total grade is ', total_grade)

定义了一个函数,传入一个参数为 name, 后面的参数*grades 使用了 * 修饰,表明该参数是一个可变参数,这是一个可迭代的对象。该函数输入姓名和各科的成绩,输出姓名和总共成绩。所以可以这样调用函数 report('Mike', 8, 9),输出的结果为 Mike total grade is 17, 也可以这样调用 report('Mike', 8, 9, 10),输出的结果为 Mike total grade is 27

关键字参数

关键字参数可以传入0个或者任意个含参数名的参数,这些参数名在函数定义中并没有出现,这些参数在函数内部自动封装成一个字典(dict).

def portrait(name, **kw):
  print('name is', name)
  for k,v in kw.items():
    print(k, v)

定义了一个函数,传入一个参数 name, 和关键字参数 kw,使用了 ** 修饰。表明该参数是关键字参数,通常来讲关键字参数是放在函数参数列表的最后。如果调用参数 portrait('Mike', age=24, country='China', education='bachelor') 输出:

name is Mike
age 24
country China
education bachelor

通过可变参数和关键字参数,任何函数都可以用 universal_func(*args, **kw) 表达。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python def函数的定义、使用及参数传递实现代码
Aug 10 Python
Python对象的深拷贝和浅拷贝详解
Aug 25 Python
简单介绍Python中用于求最小值的min()方法
May 15 Python
Python引用类型和值类型的区别与使用解析
Oct 17 Python
TensorFlow实现Softmax回归模型
Mar 09 Python
python实现画一颗树和一片森林
Jun 25 Python
Python实现的删除重复文件或图片功能示例【去重】
Apr 23 Python
python科学计算之numpy——ufunc函数用法
Nov 25 Python
python进程池实现的多进程文件夹copy器完整示例
Nov 27 Python
Python属性和内建属性实例解析
Jan 14 Python
在pytorch中实现只让指定变量向后传播梯度
Feb 29 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
Jun 02 Python
150行Python代码实现带界面的数独游戏
Apr 04 #Python
Python decorator拦截器代码实例解析
Apr 04 #Python
浅谈Python中os模块及shutil模块的常规操作
Apr 03 #Python
Python实现多线程下载脚本的示例代码
Apr 03 #Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
Apr 03 #Python
pycharm安装及如何导入numpy
Apr 03 #Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
Apr 03 #Python
You might like
php 定义404页面的实现代码
2012/11/19 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
JQuery 常用方法和事件详细介绍
2013/04/18 Javascript
详解JavaScript中Date.UTC()方法的使用
2015/06/12 Javascript
jQuery Ajax请求后台数据并在前台接收
2016/12/10 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
Nodejs 获取时间加手机标识的32位标识实现代码
2017/03/07 NodeJs
详解Angular.js数据绑定时自动转义html标签及内容
2017/03/30 Javascript
如何使用vuejs实现更好的Form validation?
2017/04/07 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
vue改变对象或数组时的刷新机制的方法总结
2019/04/24 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
微信小程序解析富文本过程详解
2019/07/13 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
jQuery鼠标滑过横向时间轴样式(代码详解)
2019/11/01 jQuery
ZK中使用JS读取客户端txt文件内容问题
2019/11/07 Javascript
解决vue-router 切换tab标签关闭时缓存问题
2020/07/22 Javascript
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
2014/01/23 Python
django 通过URL访问上传的文件方法
2019/07/28 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
Python中全局变量和局部变量的理解与区别
2021/02/07 Python
HTML5+CSS3网页加载进度条的实现,下载进度条的代码实例
2016/12/30 HTML / CSS
自荐信要包含哪些内容
2013/11/06 职场文书
摄影助理岗位职责
2014/02/07 职场文书
自荐信的基本格式
2014/02/22 职场文书
《赶海》教学反思
2014/04/20 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
借条如何写
2015/05/26 职场文书
音乐剧猫观后感
2015/06/04 职场文书
小学运动会通讯稿
2015/07/18 职场文书
高中数学课堂教学反思
2016/02/18 职场文书
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript
mysql字段为NULL索引是否会失效实例详解
2022/05/30 MySQL