为什么 \n 在内部打印时仅在 f 字符串中起作用?

Why does \n work only in f string when inside print?

我正在为 python/pandas 做一个学校作业,想试试 f 字符串,因为它似乎是一种非常方便的格式化方式。

阅读文档后,我意识到我不能使用 \n 来格式化输出。对于此代码:

    f"Shape of dataset:\n {df.shape} (rows, columns)\n"

我得到这个输出:

Out[38]: 'Shape of dataset:\n (270792, 11) (rows, columns)\n'

这正是我在阅读文档后所期望的。

但是,当我用 print() 包围它时:

print(f"Shape of dataset:\n {df.shape} (rows, columns)\n")

我得到了我想要的样子:

Shape of dataset:
 (270792, 11) (rows, columns)

我知道我也可以使用常规格式,但我很好奇为什么会这样。是否因为 print?

而忽略了 f 字符串组件

这不是 f 弦特有的。这是 QPython 的 REPL 在我的 phone:

上的结果
>> "\nhello\n" 
'\nhello\n'

如果您在 REPL 中输入字符串,转义字符(如“\n”)将保持原样。当明确 print 时,它们只是 "expressed"。尽管 REPL 中的 P 代表 "print",但 REPL 显然使用了不同的打印机制,或者在打印之前手动为您转义字符以保留它们。

这在检查字符串时很有用,因为 "invisible" 字符(如换行符和制表符)在打印输出中很难被发现。

以下是一些示例,说明当您在 Python/IPython Repl 中输入字符串时,会显示该字符串的 repr 形式。使用哪个字符串格式化程序(f-strings 或 .format())并不重要。但是,当您 print 它时,它会被格式化并转义换行符、制表符等字符。

In [18]: f"a\nb\n"
Out[18]: 'a\nb\n'

In [19]: print(f"a\nb\n")
a
b


In [20]: f"a\tb\tc"
Out[20]: 'a\tb\tc'

In [21]: print(f"a\tb\tc")
a       b       c

In [22]: a = 1

In [23]: b=2

In [24]: "a={}\nb={}".format(a,b)
Out[24]: 'a=1\nb=2'

In [25]: print("a={}\nb={}".format(a,b))
a=1
b=2

In [26]: "a={}\tb={}".format(a,b)
Out[26]: 'a=1\tb=2'

In [27]: print("a={}\tb={}".format(a,b))
a=1     b=2

Python 提供一个 repr() function that shows the printable representation of the object. All statements without the print above use this internally in the Python/IPython console. There is also the str() function that formats the object. Internally, when you print 字符串,首先应用 str() 格式化字符串。

In [29]: print(repr(f"a\tb\tc"))
'a\tb\tc'

In [30]: print(str(f"a\tb\tc"))
a       b       c