为什么 \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
我正在为 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 弦特有的。这是 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