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

时间:2019-04-25 21:34:15

标签: python f-string

我正在为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字符串部分?

2 个答案:

答案 0 :(得分:8)

这不是特定于f字符串的。这是我手机上的QPython REPL的结果:

>> "\nhello\n" 
'\nhello\n'

如果在REPL中输入字符串,则转义字符(如“ \ n”)保持原样。仅在明确print列出时才“表达”它们。即使REPL中的P代表“打印”,REPL显然仍使用不同的打印机制,或者在打印之前为您手动转义字符以保留它们。

这在检查字符串时很有用,因为在打印输出中可能很难发现诸如换行符和制表符之类的“不可见”字符。

答案 1 :(得分:3)

以下是一些示例,这些示例说明了当您在Python / IPython Repl中输入字符串时,将显示字符串的repr形式。使用哪个字符串格式化程序(f字符串或.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()函数,该函数显示对象的可打印表示形式。上面没有print的所有语句在Python / IPython控制台内部都使用它。还有str()函数可格式化对象。在内部,当您print字符串时,将首先应用str()来格式化字符串。

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

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