Last Updated on 2023-06-27 by Clay
前陣子閱讀了不少 LLaMA 的各種 LoRA 模型訓練(雖然已經大概是兩個月前…),在閱讀各家程式碼的時候,發現在程式碼中設定給予模型的 prompt 時,若需要根據不同的資料調整內容,使用 format_map()
的格式看起來最為乾淨。
所以今天這篇文章就來簡單記錄一下 format_map()
函式吧!
範例程式碼
簡單來說,format_map()
可以把原先字串留空變數的部分,使用填入對應的 key 值組成新的字串。
例如以下的範例程式碼,原始的字串留空了 {Name} 和 {Age} 兩個欄位。假設我們有很多的資料,我們就可以使用 for 迴圈取得新組成的資料。
# coding: utf-8
def main() -> None:
data = [
{"Name": "Clay", "Age": 29},
{"Name": "Atlas", "Age": 27},
{"Name": "Wendy", "Age": 20},
]
original_text = "My name is {Name} and I am {Age} years old."
for item in data:
print(original_text.format_map(item))
if __name__ == "__main__":
main()
Output:
My name is Clay and I am 29 years old. My name is Atlas and I am 27 years old. My name is Wendy and I am 20 years old.
如果不知道這個語法的話,我們也只能將其寫成:
for item in data:
print("My name is {} and I am {} years old.".format(item["Name"], item["Age"]))
for item in data:
print(f"My name is {item['Name']} and I am {item['Age']} years old.")
for item in data:
print(f"My name is " + item["Name"] + " and I am " + str(item["Age"]) + " years old.")
第一種在變數很多的時候看起來會很亂。
第二種算是還不錯、可讀性也很好的寫法;就是在遇上需要條件控制切換不同的變數填入時不像 format_map()
來得方便,可能需要更動到原始資料。
第三種算是可讀性最差的了。
以上,是一些組合字串的 Python 小技巧。