<p><code>f"..."</code>在将表达式结果插入<em>文本</em>时,字符串是很好的,但是没有文本,在单独的变量中有模板字符串。</p>
<p>可以使用<a href="https://docs.python.org/3/library/stdtypes.html#str.format" rel="noreferrer">^{<cd2>}</a>将值应用于该模板:</p>
<pre><code>name=["deep","mahesh","nirbhay"]
user_input = "certi_{element}" # this string i ask from user
for value in name:
print(user_input.format(element=value))
</code></pre>
<p>使用名称(例如<code>{element}</code>)的字符串格式占位符不是<em>变量</em>。而是为<code>str.format()</code>调用的关键字参数中的每个名称分配一个值。在上面的例子中,<code>element=value</code>传递<code>value</code>变量的值,用<code>element</code>填充占位符。</p>
<p>与<code>f</code>-字符串不同,<code>{...}</code>占位符是<em>而不是</em>表达式,不能在模板中使用任意Python表达式。这是件好事,您不希望最终用户能够在您的程序中执行任意Python代码。有关详细信息,请参见<a href="https://docs.python.org/3/library/string.html#formatstrings" rel="noreferrer"><em>Format String Syntax</em> documenation</a>。</p>
<p>您可以传入任意数量的名称;字符串模板没有<em>可以使用其中任何名称。如果将<code>str.format()</code>与<code>**mapping</code>调用约定结合起来,则可以使用任何字典作为值的源:</p>
<pre><code>template_values = {
'name': 'Ford Prefect',
'number': 42,
'company': 'Sirius Cybernetics Corporation',
'element': 'Improbability Drive',
}
print(user_input.format(**template_values)
</code></pre>
<p>上面将允许用户在模板中使用<code>template_values</code>中的任何名称,可以任意次数使用。</p>
<p>虽然可以使用<code>locals()</code>和<code>globals()</code>生成将变量名映射到值的字典,但我不建议使用这种方法。使用像上面这样的专用名称空间来限制可用的名称,并为最终用户记录这些名称。</p>