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

Lau*_*ado 4 python f-string

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

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

    f"Shape of dataset:\n {df.shape} (rows, columns)\n"
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

    f"Shape of dataset:\n {df.shape} (rows, columns)\n"
Run Code Online (Sandbox Code Playgroud)

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

但是,当我用包围时print(),如下所示:

print(f"Shape of dataset:\n {df.shape} (rows, columns)\n")
Run Code Online (Sandbox Code Playgroud)

我以我想要的方式找到它:

Out[38]: 'Shape of dataset:\n (270792, 11) (rows, columns)\n'
Run Code Online (Sandbox Code Playgroud)

我知道我也可以使用常规格式,但是我很好奇为什么这样做。是因为f字符串组件被忽略了print吗?

Car*_*ate 8

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

>> "\nhello\n" 
'\nhello\n'
Run Code Online (Sandbox Code Playgroud)

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

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


ama*_*anb 5

以下是一些示例,说明当您将字符串输入 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
Run Code Online (Sandbox Code Playgroud)

Python 提供了一个repr()函数来显示对象的可打印表示。所有没有print上述内容的语句都在 Python/IPython 控制台内部使用它。还有用于格式化对象的str()函数。在内部,当您打印字符串时,首先应用 str() 来格式化字符串。

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

In [30]: print(str(f"a\tb\tc"))
a       b       c
Run Code Online (Sandbox Code Playgroud)