如何将字符串转换为f字符串?

发布于 2021-01-29 19:19:46

我正在阅读有关python的新f字符串的 博客
,它们看起来很整洁。但是,我希望能够从字符串或文件中加载f字符串。

我似乎找不到任何执行此操作的字符串方法或其他函数。

从上面我的链接中的示例:

name = 'Fred'
age = 42
f"My name is {name} and I am {age} years old"

'My name is Fred and I am 42 years old'

但是,如果我有琴弦s怎么办?我希望能够s像这样:

name = 'Fred'
age = 42
s = "My name is {name} and I am {age} years old"
effify(s)

事实证明,我已经可以执行类似的操作str.format并获得性能提高。即:

format = lambda name, age: f"My name is {name} and I am {age} years old"
format('Ted', 12)

'My name is Ted and I am 12 years old'
关注者
0
被浏览
201
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    f字符串是代码。不仅以安全的方式(当然,字符串文字就是代码),而且以危险的任意代码执行方式。这是有效的f字符串:

    f"{__import__('os').system('install ransomware or something')}"
    

    它将在评估时执行任意的shell命令。

    您在问如何获取从文本文件加载的字符串并将其评估为代码,答案归结为eval。这当然是 安全隐患可能不是一个好主意
    ,因此,我建议不要尝试从文件中加载f字符串。

    如果f"My name is {name} and I am {age} years old"要从文件加载f字符串,则实际上

    f"My name is {name} and I am {age} years old"
    

    在文件中,f并用引号引起来。

    从文件中读取它,对其进行编译并保存(因此eval不必每次都重新编译):

    compiled_fstring = compile(fstring_from_file, '<fstring_from_file>', 'eval')
    

    并使用eval

    formatted_output = eval(compiled_fstring)
    

    如果这样做,请非常注意从中加载f字符串的来源。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看