我有一本有很多字串的字典。
是否可以使用占位符存盤格式化字串并稍后傳入實際值?
我在想這樣的事情:
d = {
"message": f"Hi There, {0}"
}
print(d["message"].format("Dave"))
上面的代碼顯然不起作用,但我正在尋找類似的東西。
uj5u.com熱心網友回復:
你使用 f-string; 它已經0在那里插值了。你可能想在f那里洗掉
d = {
# no f here
"message": "Hi There, {0}"
}
print(d["message"].format("Dave"))
Hi There, Dave
uj5u.com熱心網友回復:
問題:將 f-String 與 str.format 混合
| 技術 | 蟒蛇版 |
|---|---|
| 字串 | 自 3.6 |
str.format |
自 2.6 |
你的字典值包含F-字串被立即評估。所以花括號內的運算式 (was {0}) 是直接插入的 (became 0),因此分配的值變成了"Hi There, 0"。
在應用.format引數時"Dave",這被忽略了,因為 string 已經失去了{}里面的模板。最后字串按原樣列印:
你好,0
嘗試使用 f-String
如果我們使用變數名name而不是常量整數會發生0什么?
讓我們在 Python 的控制臺 (REPL) 上試一試:
>>> d = {"message": f"Hi There, {name}"}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'name' is not defined
好的,我們必須先定義變數。假設我們做了:
>>> name = "Dave"; d = {"message": f"Hi There, {name}"}
>>> print(d["message"])
Hi There, Dave
這有效。但它要求大括號內的變數或運算式在運行時有效,在定義位置:name需要在之前定義。
打破長矛 str.format
有原因
- 當您需要從外部來源(例如檔案或資料庫)讀取模板時
- 當不是變數而是占位符獨立于您的源配置時
那么索引占位符應該優先于命名變數。
考慮具有 value的給定資料庫列訊息"Hello, {1}. You are {0}."。它可以獨立于實作(編程語言、周圍代碼)讀取和使用。
例如
- 在 Java 中:
MessageFormat.format(message, 74, "Eric") - 在Python:
message.format(74, 'Eric')。
另請參閱: 在 Java 中使用 MessageFormat.format() 格式化訊息
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/399078.html
上一篇:為什么不呼叫移動建構式和賦值來使用initialize_list初始化向量
下一篇:使用類模板節點需要模板引數C
