def tag(name, *content, cls=None, **attrs):
"""生成一个或者多个标签"""
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)
- 传入单个定位,生成一个指定名称的空标签。
- 第一个参数后面的任意个参数会被*content捕获,存入一个元组。
- tag函数签名中没有明确指定名称的关键字参数会被**attrs捕获,存入一个字典。
- cls参数只能作为关键字参数传入。
- 调用tag函数时,即便第一个定位参数也能作为关键字参数传入。
- 在my_tag前面加上**,字典中的所有元素作为单个参数传入,同名键会绑定到对于的具名参数上,余下的则被**attrs捕获