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