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操作列表的常用方法分享
Feb 13 Python
简介Django中内置的一些中间件
Jul 24 Python
Python中装饰器高级用法详解
Dec 25 Python
python3.7.0的安装步骤
Aug 27 Python
Python中调用其他程序的方式详解
Aug 06 Python
使用python切片实现二维数组复制示例
Nov 26 Python
如何真正的了解python装饰器
Aug 14 Python
python实现简单的五子棋游戏
Sep 01 Python
Scrapy爬虫文件批量运行的实现
Sep 30 Python
教你使用Python pypinyin库实现汉字转拼音
May 27 Python
使用pycharm运行flask应用程序的详细教程
Jun 07 Python
关于python中readlines函数的参数hint的相关知识总结
Jun 24 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 csv操作类代码
2009/12/14 PHP
PHP修改session_id示例代码
2014/01/08 PHP
php版微信返回用户text输入的方法
2016/11/14 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
jQuery1.6 使用方法一
2011/11/23 Javascript
Jquery validation remote 验证的缓存问题解决方法
2014/03/25 Javascript
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
基于jquery实现二级联动效果
2017/03/30 jQuery
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
解决vue-router中的query动态传参问题
2018/03/20 Javascript
微信小程序中换行空格(多个空格)写法详解
2018/07/10 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
Vue 实例事件简单示例
2019/09/19 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
2019/11/20 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python3处理含有中文的url方法
2018/05/10 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
Python 异常处理Ⅳ过程图解
2019/10/18 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
2020/05/12 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
2020/07/27 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
2021/01/07 Python
css3 矩阵的使用详解
2018/03/20 HTML / CSS
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
服务中心夜班服务员岗位职责
2013/11/27 职场文书
电气工程师岗位职责
2014/01/01 职场文书