Python函数参数匹配模型通用规则keyword-only参数详解


Posted in Python onJune 10, 2019

Python3对函数参数的排序规则更加通用化了,即Python3 keyword-only参数,该参数即为必须只按照关键字传递而不会有一个位置参数来填充的参数。该规则在处理人一多个参数是很有用的。

keyword-only

kword_only(1, 2, 3, c=4)
print('-' * 20)
kword_only(a=1, c=3)

示例结果:

1 (2, 3) 4
--------------------
1 () 3

在 *args 之后的参数都需要在调用中使用关键字的方式传递,否则会抛出异常。

def kword_only(a, *b, c):
  print(a, b, c)
kword_only(1, 2, 3)

异常结果:

kword_only(1, 2, 3)
TypeError: kword_only() missing 1 required keyword-only argument: 'c'

我们也可以在参数列表中使用一个 * 字符,表示函数不会接受变量长度的参数列表,而是要求 * 后面的参数都需要使用关键字参数的方式传递。

def kword_only(a, *, b, c):
  print(a, b, c)
kword_only(1, b=2, c=3)
print('-'*20)
kword_only(b=2, c=3, a=1)

示例结果:

1 2 3
--------------------
1 2 3

我们可以看到 a 可以利用位置参数进行传递,但是 b 、 c 必须通过关键字参数传递,否则就会抛出异常。

def kword_only(a, *, b, c):
  print(a, b, c)
kword_only(1, 2, 3)

异常结果:

kword_only(1, 2, 3)
TypeError: kword_only() takes 1 positional argument but 3 were given

当然我们,可以通过对keyword-only参数使用默认值,这样例中的 a 仍可以通过位置参数或者关键字参数传递,而 b 、 c 就是可选的了,当然如果需要传递的话仍然是要利用关键字参数进行传递的。

def kword_only(a, *, b=2, c=3):
  print(a, b, c)
kword_only(1)
print('-'*20)
kword_only(a=1)
print('-'*20)
kword_only(b=22, c=33, a=11)

示例结果:

1 2 3
--------------------
1 2 3
--------------------
11 22 33

总结

以上所述是小编给大家介绍的Python函数参数匹配模型通用规则keyword-only参数详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
详解Python中的装饰器、闭包和functools的教程
Apr 02 Python
Python实现网站注册验证码生成类
Jun 08 Python
Python iter()函数用法实例分析
Mar 17 Python
对命令行模式与python交互模式介绍
May 12 Python
python3.6的venv模块使用详解
Aug 01 Python
python ChainMap 合并字典的实现步骤
Jun 11 Python
python关于矩阵重复赋值覆盖问题的解决方法
Jul 19 Python
Python函数装饰器原理与用法详解
Aug 16 Python
在python image 中实现安装中文字体
May 16 Python
tensorflow模型转ncnn的操作方式
May 25 Python
Python如何读取、写入JSON数据
Jul 28 Python
通过代码简单了解django model序列化作用
Nov 12 Python
python 判断文件还是文件夹的简单实例
Jun 10 #Python
python实现植物大战僵尸游戏实例代码
Jun 10 #Python
python中的协程深入理解
Jun 10 #Python
Python中asyncio模块的深入讲解
Jun 10 #Python
Python中的asyncio代码详解
Jun 10 #Python
Django集成CAS单点登录的方法示例
Jun 10 #Python
详解Python中的测试工具
Jun 09 #Python
You might like
简化php模板页面中分页代码的解析
2009/02/06 PHP
黑夜路人出的几道php笔试题
2009/08/04 PHP
php面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
PHP限制HTML内容中图片必须是本站的方法
2015/06/16 PHP
页面中iframe相互传值传参
2009/12/13 Javascript
JavaScript设计模式之工厂模式和构造器模式
2015/02/11 Javascript
vue开发心得和技巧分享
2016/10/27 Javascript
angularjs实现简单的购物车功能
2017/09/21 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
2017/12/11 jQuery
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
vue+axios新手实践实现登陆的示例代码
2018/06/06 Javascript
vue.js自定义组件directives的实例代码
2018/11/09 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
关于自定义Egg.js的请求级别日志详解
2018/12/12 Javascript
JS使用cookie保存用户登录信息操作示例
2019/05/30 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
Vue form表单动态添加组件实战案例
2019/09/02 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
[05:02]2014DOTA2 TI中国区预选赛精彩TOPPLAY第三弹
2014/06/25 DOTA
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
python迭代器的使用方法实例
2013/11/21 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
2016/06/27 Python
Python 实现链表实例代码
2017/04/07 Python
Django 前后台的数据传递的方法
2017/08/08 Python
Python3内置模块random随机方法小结
2019/07/13 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
Python如何将模块打包并发布
2020/08/30 Python
CSS3教程(7):CSS3嵌入字体
2009/04/02 HTML / CSS
教师的实习自我鉴定
2013/12/17 职场文书
优秀党员推荐材料
2014/12/18 职场文书
毕业生个人总结
2015/02/28 职场文书
2015年煤矿工作总结
2015/04/28 职场文书
离婚起诉书范本
2015/05/18 职场文书