当前位置: 首页 > 面试题库 >

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

郎经纶
2023-03-14
问题内容

我正在阅读有关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'

问题答案:

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字符串的来源。



 类似资料:
  • 问题内容: 如何将经典字符串转换为f字符串? 输出: 所需的输出: 问题答案: f字符串是 语法 ,而不是对象类型。您不能将任意字符串转换为该语法,该语法会创建一个字符串对象,而不是相反。 我假设您想用作模板,因此只需在对象上使用方法: 如果要提供可配置的模板服务,请创建一个包含所有可以插值的字段的名称空间字典,并与调用语法一起使用以应用名称空间: 然后,用户可以在字段中的名称空间中使用任何键(或

  • 问题内容: 我有一个,我需要一个。如何从一个转换为另一个? 问题答案: 好问题。我有以下五种 6种方法可以做到这一点。 注意:返回。因此有效地两者是相同的。 调用,这又设置了数组。 另一方面,调用以下程序包私有构造函数。 从源代码中的Java 8的源代码 因此似乎是最有效的方法,在这两个存储器和速度方面,用于转换char到String。

  • 问题内容: 我一直在尝试使用 GZIPOutputStream 等,但在理解它们方面没有成功。我要做的就是将字符串- “字符串” 转换为GZIP Base64格式。我怎样才能做到这一点? 编辑: 通过GZIP Base64格式,我的意思是字符串首先使用GZIP压缩,然后转换为Base64 问题答案: 使用Apache Commons Codec 。 这是一个示例类: 哪个输出: 在Linux下,您

  • 问题内容: 我想获取一串字符串并将其转换为单词对流。例如: 我有: 我想要:。 这几乎与Zipping相同,如使用带有Lambda的JDK8的Zipping流中概述的那样(java.util.stream.Streams.zip) 但是,这会产生: 以下代码有效,但显然是错误的方法(不是线程安全的等): 问题答案: 如果你: 不喜欢使用流中所有字符串创建列表的想法 不想使用外部库 喜欢弄脏你的手

  • 如何将字符串(字节字符串)转换为字节(字节字符串),而不必手动复制和粘贴字符串并在其前面放置b?

  • 我有一个字符串返回给我,其中包含转义字符。 这是一个示例字符串 " test\40gmail.com " 如您所见,它包含转义字符。我需要将其转换为其实际值,即 " test@gmail.com " 我该怎么做?