def tag(name, *content, cls=None, **attrs)->str: """生成一个或多个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)
print(tag.defaults) print(tag.code) print(tag.code.co_varnames) print(tag.code.co_argcount)
from inspect import signature sig=signature(tag) my_tag = {'name': 'img', 'title': 'Sunset Boulevard','src': 'sunset.jpg', 'cls': 'framed'} si=sig.bind(**my_tag) print(sig) print(str(si)) print(sig.return_annotation) for name,param in sig.parameters.items(): print(param.kind,':',name,'=',param.default)
None <code object tag at 0x000001DDFE2DA1E0, file "D:/file/python/today/today.py", line 1> ('name', 'cls', 'content', 'attrs') 1 (name, *content, cls=None, **attrs) <BoundArguments (name='img', cls='framed', attrs={'title': 'Sunset Boulevard', 'src': 'sunset.jpg'})> <class 'str'> POSITIONAL_OR_KEYWORD : name = <class 'inspect._empty'> VAR_POSITIONAL : content = <class 'inspect._empty'> KEYWORD_ONLY : cls = None VAR_KEYWORD : attrs = <class 'inspect._empty'>