2019.5.8_此书真乃宝书也_从定位参数到仅限关键字参数
《摘自流畅的Python》 此书真乃宝书也,虽说还是有点儿没懂
从定位参数到仅限关键字参数
Python最好的特性之一是提供了极为灵活的参数处理机制,而且Python3进一步提供了仅限关键字参数(keyword-only argument)。与之密切相关的是,调用函数时使用*和**“展开”可迭代对象,映射到单个参数。下面实例中代码展示这些特性,实际使用在第二个例子中。
[例5-11] tag函数用于生成HTML标签,使用名为cls
的关键字参数传入“class”属性,这是一种变通方法,因为“class”是Python的关键字:
def tag(name, *content, cls=None, **attrs):"""生成一个或多个HTML标签"""if cls is not None:attrs['class'] = clsif attrs:attr_str = ''.join('%s="%s"' % (attr, value)for attr, valuein sorted(attrs.items()))else:attr_str = ''if content:return '\n'.join('<%s%s>%s</%s>' % (name, attr_str, c, name) for c in content)else:return '<%s%s />' % (name, attr_str)
复制代码
tag 函数的调用方式很多,例子如下:
>>> tag('br') # 传入单个参数,生成一个指定名称的空标签
'<br />'>>> tag('p', 'hello') # 第一个参数后面的任意个参数会被*content捕获,存到一个数组
'<p>hello</p>'>>> print(tag('p', 'hello', 'world'))
<p>hello</p>
<p>world</p>>>> tag('p', 'hello', id=33)
'<p id=33>hello</p>'
>>> # tag函数签名中没有明确指定名称的关键字参数会被**attrs捕获,存入字典>>> print(tag('p', 'hello', 'world', cls='sidebar')) # cls参数只能作为关键字参数传入
<p class='sidebar'>hello</p>
<p class='sidebar'>world</p>>>> tag(content='testing', name='img') # 调用tag函数,即便第一个定位参数也能作为关键字参数传入
'<img content="testing", name="img">'>>> # 在 my_tag 前面加上**, 字典中的所有元素作为单个参数传入,
>>> # 同名键会绑定到对应的参数具体参数上,其余的则被**attrs 捕获
>>> my_tag = {'name':'img', 'title':'Sunset Boulevard',
... 'src':'sunset.jpg', 'cls':'framed'}
>>> tag(**my_tag)
'<img class="framed" src="sunset.jpg", title="Sunset Boulevard" />'
复制代码
仅限关键字参数是Python3新增的特性,在上例中,cls
参数只能通过关键字参数指定,它一定不会捕获未命名的定位参数。定义函数时若想指定仅限关键字参数,要把它们放到前面*的参数后面。如果不想支持数量不定的定位参数,但是想支持仅限关键字参数,在签名后面放一个*,如下所示:
>>> def f(a, *, b):
... return a, b
>>> f(1, b=2)
(1, 2)
复制代码
注意,仅限关键字参数不一定要有默认值,可以像上例中的b一样,强制必须传入实参。
接下来说明函数参数的内省,以一个Web框架中的实例为引子,接着讨论内省。
2019.5.8_此书真乃宝书也_从定位参数到仅限关键字参数相关推荐
- 真融宝逾期?办公地点已悄悄转移? 回应:将于周内公告资金转出详情
来源 | 柒财经 作者 | 南木.何瑜 7月份初,股市大盘节节升,股民赚得盆满钵满,可对于网贷出借人而言,似乎并不友好. 7月4日,杭州市公安局上城区分局官方发布警方通报指出,于同日对微贷(杭州)金融 ...
- 腾讯2019秋招笔试真题
1.小Q爬塔 描述:小Q正在攀登一座宝塔,这座塔很特别,塔总共有n曾层,但是没两层之间的净高却不相同,所以造成了小Q爬过每层的时间也不同.如果某一层的高度为x,那么爬过这一层锁需的还是件也是x.小Q孩 ...
- 【软考软件评测师】2019综合知识历年真题
[软考软件评测师]2019综合知识历年真题 2019综合知识历年真题 [软考软件评测师]2019综合知识历年真题 [2019年评测真题第01题:绿色] 01.虚拟存储技术使用()密切配合来构成虚拟存储 ...
- 网络技能大赛-2019年国赛真题[2019年全国职业技能大赛高职组计算机网络应用赛项真题-H卷]路由交换部分答案详解
网络技能大赛-2019年国赛真题[2019年全国职业技能大赛高职组计算机网络应用赛项真题-H卷]路由交换部分答案详解 2022年全国职业技能大赛网络系统管理赛项相较2021年再次做出改动,Linux部 ...
- 计算机二级access题库百度云,2019计算机二级access真题题库试题精选(附答案).pdf...
2019计算机二级access真题题库试题精选(附答案).pdf2019计算机二级access真题题库试题精选(附答案).pdf 全国计算机二级考试试题题库 (附答案) 一.选择题((1)-(40)每 ...
- [蓝桥杯单片机]刷题笔记—客观题—2019年省赛真题
本人最近在备战蓝桥杯的单片机赛道 需要多多刷题历练 这一系列的文章会跟大家一起计算.一起翻手册找答案 (在之前的文章中有详细记录的只会简单解释,不懂的自己往前翻) 一方面帮助自己记住刷过的题 另一方面 ...
- 蓝桥杯 2019年省赛真题 (Java 大学B组)
蓝桥杯 2019 年省赛真题(Java 大学 B 组 ) #A 组队 #B 不同子串 #C 数列求值 #D 数的分解 #E 迷宫 #F 特别数的和 #G 外卖店优先级 #H 人物相关性分析 #I 后缀 ...
- 网络技能大赛-2019年国赛真题[2019年全国职业技能大赛高职组计算机网络应用赛项真题-H卷]AC/AP/EG部分答案详解
网络技能大赛-2019年国赛真题[2019年全国职业技能大赛高职组计算机网络应用赛项真题-H卷]AC/AP/EG部分答案详解 2022年全国职业技能大赛网络系统管理赛项相较2021年再次做出改动,Li ...
- 2019年数学二真题手稿解析
2019年数学二真题手稿解析 (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) ...
最新文章
- python小程序-10个Python练手小程序,学习python的很好的资料
- 第十三章:Java_反射机制
- 产品设计美学案例分析_美学在产品设计中的重要性
- 微信公众平台开发(150)——从新浪云SAE上传图片到图文消息
- OC反射机制获得该类全部属性并创建数据表
- UJAM Beatmaker VICE for Mac(80年代风格鼓机插件)
- 【深度学习】机器视觉开源代码集合
- 如何处理SQL Server中附加数据库时出现的错误
- 为什么成为CISSP持证专家?
- mysql 批量插入 性能_MySQL批量插入数据性能比较
- 怎么下载安装Firebug和使用Firebug
- 计算机系相声剧本,大学相声剧本:两种学生
- android,解决手动创建的桌面快捷方式无法跳转到制定的activity的问题,提示未安装应用程序
- mysql数据库西里尔文乱码_使用Python从MySQL读取西里尔文utf8符号不正确
- CVPR ECCV ICCV论文汇总
- Juniper模拟器使用指南
- 【Cocos2d-x 3.x】 动作类Action源码分析
- 浅谈Linux PCI设备驱动(二)
- 第3章 垃圾收集器与内存分配策略6
- 51单片机驱动AHT10温湿度传感器
热门文章
- irq4中断子程序c语言写法,AVR汇编程序参考
- Spring Boot 2 实践记录之 条件装配
- Voltage Keepsake CodeForces - 801C (思维+二分)
- 33 -jQuery 属性操作,文档操作(未完成)
- 解决移动端 手机号input 属性为 number,maxlength无效情况
- webpack第一节(4)
- wordpress 当前栏目名,当前栏目的分类名
- Android develop 国际化
- EMVTag系列3《持卡人基本信息数据》
- 用DDA Convolution和Perlin Noise来模拟水粉画笔触