我想知道如何使用f字符串以Python方式格式化此 case :

names = ['Adam', 'Bob', 'Cyril']
text = f"Winners are:\n{'\n'.join(names)}"
print(text)

问题是'\'不能在f字符串的{...}表达式部分内使用.

Winners are:
Adam
Bob
Cyril

推荐答案

不能.反斜杠不能出现在花括号{}内;这样做会导致SyntaxError:

>>> f'{\}'
SyntaxError: f-string expression part cannot include a backslash

对于f字符串,这在PEP中指定:

反斜杠可能不会出现在f字符串的表达式部分[…]

一种 Select 是将'\n'赋给一个名称,然后将.join赋给f字符串内的那个名称;也就是说,不使用文字:

names = ['Adam', 'Bob', 'Cyril']
nl = '\n'
text = f"Winners are:{nl}{nl.join(names)}"
print(text)

结果是:

Winners are:
Adam
Bob
Cyril

@wim指定的另一个选项是使用chr(10)返回\n,然后加入其中.f"Winners are:\n{chr(10).join(names)}"

当然,还有一种方法是预先设置为'\n'.join,然后相应地添加名称:

n = "\n".join(names)
text = f"Winners are:\n{n}"

结果是相同的输出.

注:

这是f个字符串和str.format个字符串之间的一个小差异.在后一种情况下,只要相应的古怪dict被解包,并且包含这些键,就可以始终使用标点符号:

>>> "{\\} {*}".format(**{"\\": 'Hello', "*": 'World!'})
"Hello World!"

(请不要这样做.)

在前者中,标点符号是不允许的,因为不能有使用标点符号的标识符.


旁白:我肯定会 Select printformat,正如其他答案所建议的那样.我给出的选项仅适用于出于某种原因使用f字符串的情况.

仅仅因为有些东西是新的,并不意味着你应该try 用它来做每件事;-)

Python相关问答推荐

为什么Pydantic在我申报邮箱时说邮箱丢失

获取2个字节之间的异或

流畅的模式,采用Escc方法

Python在通过Inbox调用时给出不同的响应

带有pandas的分区列上的过滤器的多个条件read_parquet

将列表中的元素替换为收件箱中的元素

Plotly:如何更改Heatmap中彩色条的勾选文本

已删除的构造函数调用另一个构造函数

Twilio:CallInstance对象没有来自_的属性'

是pandas.DataFrame使用方法查询后仍然排序吗?

使用多个性能指标执行循环特征消除

数据抓取失败:寻求帮助

Pandas—合并数据帧,在公共列上保留非空值,在另一列上保留平均值

try 将一行连接到Tensorflow中的矩阵

将9个3x3矩阵按特定顺序排列成9x9矩阵

ThreadPoolExecutor和单个线程的超时

如何从列表框中 Select 而不出错?

Pandas Data Wrangling/Dataframe Assignment

如何在Pyplot表中舍入值

如何使用两个关键函数来排序一个多索引框架?