ฉันใช้สตริงเทมเพลตเพื่อสร้างไฟล์บางไฟล์และฉันชอบความกระชับของ f-strings ใหม่เพื่อจุดประสงค์นี้เพื่อลดรหัสเทมเพลตก่อนหน้าของฉันจากสิ่งนี้:
template_a = "The current name is {name}"
names = ["foo", "bar"]
for name in names:
print (template_a.format(**locals()))
ตอนนี้ฉันทำได้แล้วโดยแทนที่ตัวแปรโดยตรง:
names = ["foo", "bar"]
for name in names:
print (f"The current name is {name}")
อย่างไรก็ตามบางครั้งมันก็สมเหตุสมผลที่จะกำหนดเทมเพลตไว้ที่อื่น - สูงขึ้นในโค้ดหรือนำเข้าจากไฟล์หรือบางสิ่ง ซึ่งหมายความว่าเทมเพลตเป็นสตริงแบบคงที่ที่มีแท็กการจัดรูปแบบอยู่ในนั้น จะต้องมีบางอย่างเกิดขึ้นกับสตริงเพื่อบอกให้ล่ามแปลความหมายของสตริงเป็นสตริง f ใหม่ แต่ฉันไม่รู้ว่ามีสิ่งนั้นหรือไม่
มีวิธีใดบ้างในการนำสตริงเข้ามาและตีความว่าเป็น f-string เพื่อหลีกเลี่ยงการใช้การ.format(**locals())
โทร?
ตามหลักการแล้วฉันต้องการโค้ดแบบนี้ ... ( magic_fstring_function
ส่วนที่ฉันไม่เข้าใจอยู่ที่ไหน):
template_a = f"The current name is {name}"
# OR [Ideal2] template_a = magic_fstring_function(open('template.txt').read())
names = ["foo", "bar"]
for name in names:
print (template_a)
... ด้วยผลลัพธ์ที่ต้องการนี้ (โดยไม่ต้องอ่านไฟล์สองครั้ง):
The current name is foo
The current name is bar
... แต่ผลลัพธ์จริงที่ฉันได้รับคือ:
The current name is {name}
The current name is {name}
f
สตริงf
สตริงไม่ได้เป็นข้อมูลและก็ไม่แน่นอนสตริง; มันคือรหัส (ตรวจสอบด้วยdis
โมดูล) หากคุณต้องการให้มีการประเมินโค้ดในภายหลังให้ใช้ฟังก์ชัน