与 f 字符串相比,% 格式化程序有什么好处?
What benefits does the % formatter offer in comparison to f strings?
当我遇到以下代码时,我正在阅读流利的 python 这本书
def tag(name, *content, cls=None, **attrs):
"""Generate one or more HTML tags"""
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 f'<{name}{attr_str} />'
由于这本书是在 f-strings 之前介绍的,我认为我可以进行以下替换
if content:
return '\n'.join(f'<{name}{attr_str}>{[c for c in content]}<{name}>')
这returns每个字符换行。而不是期望的输出:'<p>hello</p>'
这里需要%格式化程序吗?可以使用列表理解来实现此输出吗?
而不是
'<%s%s>%s</%s>' % (name, attr_str, c, name)
你可以使用
f'<{name}{attr_str}>{c}</{name}>'
所以你终于有了发电机
f'<{name}{attr_str}>{c}<{name}>' for c in content
而不是
'<%s%s>%s</%s>' % (name, attr_str, c, name) for c in content
和
return '\n'.join( f'<{name}{attr_str}>{c}<{name}>' for c in content )
您还可以使用 []
创建列表理解并使用 print()
查看所有创建的元素,然后再在 join()
中使用它们
data = [ f'<{name}{attr_str}>{c}<{name}>' for c in content ]
print(data)
return "\n".join( data )
当我遇到以下代码时,我正在阅读流利的 python 这本书
def tag(name, *content, cls=None, **attrs):
"""Generate one or more HTML tags"""
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 f'<{name}{attr_str} />'
由于这本书是在 f-strings 之前介绍的,我认为我可以进行以下替换
if content:
return '\n'.join(f'<{name}{attr_str}>{[c for c in content]}<{name}>')
这returns每个字符换行。而不是期望的输出:'<p>hello</p>'
这里需要%格式化程序吗?可以使用列表理解来实现此输出吗?
而不是
'<%s%s>%s</%s>' % (name, attr_str, c, name)
你可以使用
f'<{name}{attr_str}>{c}</{name}>'
所以你终于有了发电机
f'<{name}{attr_str}>{c}<{name}>' for c in content
而不是
'<%s%s>%s</%s>' % (name, attr_str, c, name) for c in content
和
return '\n'.join( f'<{name}{attr_str}>{c}<{name}>' for c in content )
您还可以使用 []
创建列表理解并使用 print()
查看所有创建的元素,然后再在 join()
data = [ f'<{name}{attr_str}>{c}<{name}>' for c in content ]
print(data)
return "\n".join( data )