我可以将Python的3.6格式的字符串文本(f-string s)导入旧的3.x,2.x Python吗?

2024-05-15 00:11:20 发布

您现在位置:Python中文网/ 问答频道 /正文

对我来说,新的Python3.6F-strings似乎是字符串可用性的一个巨大飞跃,我很乐意在新的项目中全心投入使用,这些项目可能运行在旧的解释器上。2.7、3.3-3.5的支持会很好,但至少我想在Python3.5代码库中使用它们。如何导入3.6格式的字符串文本,以供较旧的解释器使用?

我知道像f"Foo is {age} {units} old"这样的格式化字符串文本不会破坏更改,因此不会包含在from __future__ import ...调用中。但这一变化并不是后端口的(AFAIK),我需要确保我用f字符串编写的任何新代码都只在Python 3.6+上运行,而python3.6+对于许多项目来说是一个交易破坏者。


Tags: 项目字符串代码from文本agefoois
3条回答

不幸的是,如果您想使用它,您必须要求Python 3.6+,与矩阵乘法运算符@Python 3.5+yield from相同(我认为Python 3.4+

它们对代码的解释方式进行了更改,因此在旧版本中导入时会抛出语法错误。这意味着你需要把它们放在某个地方,而不是放在老Python身上,或者放在由evalexec保护的地方(我不推荐后两种!)。

所以,是的,您是对的,如果您想支持多个python版本,就不能轻松地使用它们。

我用的是:

text = "Foo is {age} {units} old".format(**locals())

它解包(**)由locals()返回的dict,该dict将所有局部变量作为dict {variable_name: value}

注意除非使用nonlocal(Python 3.0+)将其导入本地作用域,否则这对于在外部作用域中声明的变量不起作用。

你也可以使用

text.format(**locals(),**globals())

在字符串中包含全局变量。

future-fstrings将f字符串带到Python 2.7脚本中。(我根据文档假设为3.3-3.5。)

一旦通过pip install future-fstrings安装pip,就必须在代码顶部放置一个特殊的行。这句话是:

# -*- coding: future_fstrings -*-

然后,可以在代码中使用格式化的字符串文本(f-strings):

# -*- coding: future_fstrings -*-
var = 'f-string'
print(f'hello world, this is an {var}')

相关问题 更多 >

    热门问题