《摘自流畅的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_此书真乃宝书也_从定位参数到仅限关键字参数相关推荐

  1. 真融宝逾期?办公地点已悄悄转移? 回应:将于周内公告资金转出详情

    来源 | 柒财经 作者 | 南木.何瑜 7月份初,股市大盘节节升,股民赚得盆满钵满,可对于网贷出借人而言,似乎并不友好. 7月4日,杭州市公安局上城区分局官方发布警方通报指出,于同日对微贷(杭州)金融 ...

  2. 腾讯2019秋招笔试真题

    1.小Q爬塔 描述:小Q正在攀登一座宝塔,这座塔很特别,塔总共有n曾层,但是没两层之间的净高却不相同,所以造成了小Q爬过每层的时间也不同.如果某一层的高度为x,那么爬过这一层锁需的还是件也是x.小Q孩 ...

  3. 【软考软件评测师】2019综合知识历年真题

    [软考软件评测师]2019综合知识历年真题 2019综合知识历年真题 [软考软件评测师]2019综合知识历年真题 [2019年评测真题第01题:绿色] 01.虚拟存储技术使用()密切配合来构成虚拟存储 ...

  4. 网络技能大赛-2019年国赛真题[2019年全国职业技能大赛高职组计算机网络应用赛项真题-H卷]路由交换部分答案详解

    网络技能大赛-2019年国赛真题[2019年全国职业技能大赛高职组计算机网络应用赛项真题-H卷]路由交换部分答案详解 2022年全国职业技能大赛网络系统管理赛项相较2021年再次做出改动,Linux部 ...

  5. 计算机二级access题库百度云,2019计算机二级access真题题库试题精选(附答案).pdf...

    2019计算机二级access真题题库试题精选(附答案).pdf2019计算机二级access真题题库试题精选(附答案).pdf 全国计算机二级考试试题题库 (附答案) 一.选择题((1)-(40)每 ...

  6. [蓝桥杯单片机]刷题笔记—客观题—2019年省赛真题

    本人最近在备战蓝桥杯的单片机赛道 需要多多刷题历练 这一系列的文章会跟大家一起计算.一起翻手册找答案 (在之前的文章中有详细记录的只会简单解释,不懂的自己往前翻) 一方面帮助自己记住刷过的题 另一方面 ...

  7. 蓝桥杯 2019年省赛真题 (Java 大学B组)

    蓝桥杯 2019 年省赛真题(Java 大学 B 组 ) #A 组队 #B 不同子串 #C 数列求值 #D 数的分解 #E 迷宫 #F 特别数的和 #G 外卖店优先级 #H 人物相关性分析 #I 后缀 ...

  8. 网络技能大赛-2019年国赛真题[2019年全国职业技能大赛高职组计算机网络应用赛项真题-H卷]AC/AP/EG部分答案详解

    网络技能大赛-2019年国赛真题[2019年全国职业技能大赛高职组计算机网络应用赛项真题-H卷]AC/AP/EG部分答案详解 2022年全国职业技能大赛网络系统管理赛项相较2021年再次做出改动,Li ...

  9. 2019年数学二真题手稿解析

    2019年数学二真题手稿解析 (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) ...

最新文章

  1. python小程序-10个Python练手小程序,学习python的很好的资料
  2. 第十三章:Java_反射机制
  3. 产品设计美学案例分析_美学在产品设计中的重要性
  4. 微信公众平台开发(150)——从新浪云SAE上传图片到图文消息
  5. OC反射机制获得该类全部属性并创建数据表
  6. UJAM Beatmaker VICE for Mac(80年代风格鼓机插件)
  7. 【深度学习】机器视觉开源代码集合
  8. 如何处理SQL Server中附加数据库时出现的错误
  9. 为什么成为CISSP持证专家?
  10. mysql 批量插入 性能_MySQL批量插入数据性能比较
  11. 怎么下载安装Firebug和使用Firebug
  12. 计算机系相声剧本,大学相声剧本:两种学生
  13. android,解决手动创建的桌面快捷方式无法跳转到制定的activity的问题,提示未安装应用程序
  14. mysql数据库西里尔文乱码_使用Python从MySQL读取西里尔文utf8符号不正确
  15. CVPR ECCV ICCV论文汇总
  16. Juniper模拟器使用指南
  17. 【Cocos2d-x 3.x】 动作类Action源码分析
  18. 浅谈Linux PCI设备驱动(二)
  19. 第3章 垃圾收集器与内存分配策略6
  20. 51单片机驱动AHT10温湿度传感器

热门文章

  1. irq4中断子程序c语言写法,AVR汇编程序参考
  2. Spring Boot 2 实践记录之 条件装配
  3. Voltage Keepsake CodeForces - 801C (思维+二分)
  4. 33 -jQuery 属性操作,文档操作(未完成)
  5. 解决移动端 手机号input 属性为 number,maxlength无效情况
  6. webpack第一节(4)
  7. wordpress 当前栏目名,当前栏目的分类名
  8. Android develop 国际化
  9. EMVTag系列3《持卡人基本信息数据》
  10. 用DDA Convolution和Perlin Noise来模拟水粉画笔触