ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

从定位参数到仅限关键字参数

2021-12-18 11:04:48  阅读:192  来源: 互联网

标签:仅限 关键字 tag 参数 attrs hello cls


从定位参数到仅限关键字参数

Python最好的特性之一是提供了极为灵活的参数处理机制,而且Python3进一步提供了仅限关键字参数(keyword-only argument)。与之密切相关的是,调用函数时使用*和**展开可迭代对象,映射到单个参数

# tag函数用于生成HTML标签;使用名为cls的关键字参数传入’class'属性,这是一种变通方法,因为‘class’是Python的关键字
def tag(name, *content, cls=None, **attrs):
    '''生成一个或多个HTML标签'''
    if cls is not None:
        attrs['class'] = cls
    if attrs:
        attr_str = ''.join('%s="%s"' % (attr, value) for attr, value in 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('br')  # 传入特定名称,生成一个指定名称的空标签
'<br />'
tag('p', 'hello')  # 第一个参数后面的任意个参数会被*content捕获,存入一个元组
'<p>hello</p> '
print(tag('p', 'hello', 'world'))
<p>hello</p> 
<p>world</p> 
tag('p', 'hello', id=12)  # tag函数签名中没有明确指定名称的关键字参数会被**attrs捕获,存入一个字典
'<pid="12">hello</p> '
print(tag('p', 'hello', 'world', cls='sidebar'))  # cls参数只能作为关键字参数传入
<pclass="sidebar">hello</p> 
<pclass="sidebar">world</p> 
tag(content='testing', name='img')  # 调用tag函数时,即使第一个定位参数也能作为关键字参数传入
'<imgcontent="testing" />'
my_tag = {'name': 'img', 'title': 'Sunset Boulevard', 'src': 'suset.jpg', 'cls': 'framed'}
tag(**my_tag)  # 在my_tag前面加上**,字典中的所有元素作为单个参数传入,同名键会绑定到对应的具名参数上,余下的责备**attrs捕获
'<imgclass="framed"src="suset.jpg"title="Sunset Boulevard" />'

仅限关键字参数是Python3新增的特性。前面的cls参数只能通过关键字参数指定,它一定不会捕获未命名的定位参数。定义函数时若想指定仅限关键字参数,要把它们放到前面有的参数后面。如果不想支持数量不定的定位参数,但是想支持仅限关键字参数,在签名中放一个

def f(a, *, b):
    return a, b


f(1, b=2)
(1, 2)

仅限关键字参数不一定要有默认值,可以像上面的b那样,强制必须传入实参

标签:仅限,关键字,tag,参数,attrs,hello,cls
来源: https://www.cnblogs.com/Reion/p/15704546.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有