在《流畅的python》有一章中讲到了仅限关键字参数,其中的例子用于生成HTML标签非常经典,值得初学者一起揣摩学习:
def tag(name,*content,cls=none,**attrs):
"""生成一个或多个HTML标签"""
if cls is not none:
attr['class']=cls
attr_str=''
if attrs:
attr_str=''.join(' %s="%s"' % (attr,value) for attr,value in sorted(attrs.ittems()))
if content:
return '\n'.join('%s%s>' % (name,attr_str,c,name) for c in content)
else:
return '' % (name,attr_str)
程序非常简洁优雅,功能说明如下:
tag('br') 一个参数,输出
tag('p','hello') name和content ,输出:
hello
tag('p','hello','world') 输出:
hello
world
tag('p','hello',id=3) 输出:
hello
tag函数签名中没有明确指定名称的关键字参数会被**attrs捕获,存入一个字典
tag('p','hello','world',cls='sidebar')
输出:
tag(content='testing',name='img')
输出:
content是第一个参数,被attres捕获
my_tag={'name':'img','title':'sunset','src':'sunset.jpg','cls':'framed'}
tag(**my_tag)
my_tag前面加上**,字典中的所有元素作为单个参数传入,同名键会绑定到对应的具名参数上,余下则被**attrs捕获。
输出: