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 mysqldb连接数据库
Mar 16 Python
打印出python 当前全局变量和入口参数的所有属性
Jul 01 Python
python读取json文件并将数据插入到mongodb的方法
Mar 23 Python
Python用zip函数同时遍历多个迭代器示例详解
Nov 14 Python
python实现微信自动回复功能
Apr 11 Python
python SMTP实现发送带附件电子邮件
May 22 Python
python ChainMap 合并字典的实现步骤
Jun 11 Python
python tkinter canvas 显示图片的示例
Jun 13 Python
使用 Django Highcharts 实现数据可视化过程解析
Jul 31 Python
对Django url的几种使用方式详解
Aug 06 Python
python神经网络编程实现手写数字识别
May 27 Python
python blinker 信号库
May 04 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生成html分页列表的代码
2007/03/18 PHP
深入array multisort排序原理的详解
2013/06/18 PHP
php实现给图片加灰色半透明效果的方法
2014/10/20 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
php ZipArchive实现多文件打包下载实例
2019/10/31 PHP
javascript 特性检测并非浏览器检测
2010/01/15 Javascript
js中自定义方法实现停留几秒sleep
2014/07/11 Javascript
基于JS实现简单的样式切换效果代码
2015/09/04 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
2017/01/04 Javascript
jQuery实现页码跳转式动态数据分页
2017/12/31 jQuery
深入剖析Node.js cluster模块
2018/05/23 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
2018/08/13 jQuery
JavaScript实现简单音乐播放器
2020/04/17 Javascript
JavaScript页面加载事件实例讲解
2019/09/01 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
详解JavaScript中分解数字的三种方法
2021/01/05 Javascript
python类继承与子类实例初始化用法分析
2015/04/17 Python
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
使用python加密自己的密码
2015/08/04 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
基于python读取.mat文件并取出信息
2019/12/16 Python
windows支持哪个版本的python
2020/07/03 Python
利用CSS3伪元素实现逐渐发光的方格边框
2017/05/07 HTML / CSS
H5 video poster属性设置视频封面的方法
2020/05/25 HTML / CSS
JustFab加拿大:女鞋、靴子、手袋和服装在线
2018/05/18 全球购物
追悼会子女答谢词
2014/01/28 职场文书
保密承诺书范文
2014/03/27 职场文书
大学三年计划书范文
2014/04/30 职场文书
防灾减灾日活动总结
2014/08/26 职场文书
教师个人考察材料
2014/12/16 职场文书
导游词之张家界
2019/10/31 职场文书
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
2022/02/12 Redis
vue特效之翻牌动画
2022/04/20 Vue.js
Python Matplotlib绘制动画的代码详解
2022/05/30 Python