通過.format我們可以將字典解壓成字串模板。這是我唯一沒有找到如何處理 f-strings 的事情。有沒有辦法做到這一點?
例如,如何使用 f-strings 做到這一點?
template = "my values: {number} {item}"
values = dict(number=1, item='box')
print(template.format(**values))
編輯:
我認為您可以使用類似這樣的方式為未定義的值提供 f-string 模板,但它也不起作用:
template2 = "my values: {(number := None)} {(item := None)}" # values are immutable after defining
values = dict(number=1, item='box')
# how to unpack `values` into `template2`, is it possible?
我知道更長的方法可以做到這一點,我正在尋找的只是是否可以使用拆包。干杯!!
uj5u.com熱心網友回復:
我不知道 f-strings,但有字串模板:
from string import Template
template = Template("my values: $number $item")
values = dict(number=1, item='box')
print(template.substitute(**values)) # my values: 1 box
uj5u.com熱心網友回復:
這些有什么問題:
values = dict(number=1, item='box')
print(f"{values=}")
print(f"values= {values['number']} {values['item']}{values.get('missing')}")
這讓你:
values={'number': 1, 'item': 'box'}
values= 1 box None
或者您想在設定字典然后插入字典之前宣告您的 f 字串?抱歉,不能,f 字串會立即被評估,它們并不是真正的預定義模板。
預定義模板破解
我用模板做了很多作業,通常是%(foo)s那種模板或者 Jinja2 模板,并且在使用 f-strings 時錯過了傳遞模板的能力。
下面是一個 hack,但它確實允許這樣做,經過一段時間。前陣子就想這么做了,不過沒試過。
def template_1(**values):
number = values["number"]
item = values["item"]
missing = values.get("missing")
return f"values1= {number} {item} {missing}"
def template_2(**values):
return f"values2= {values['number']} {values['item']} {values.get('missing')}"
print(template_1(**values))
def do_it(t, **kwargs):
return t(**kwargs)
print(do_it(template_2,missing=3, **values))
輸出
values1= 1 box None
values2= 1 box 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/508187.html
