Python 中的格式化程序 %r 和 \n 发生了什么?
What happened with formatter %r and \n in Python?
我正在学习学习 Python 艰难之路。这是练习9的学生常见问题
中的内容
为什么我使用 %r 时 \n 换行不起作用?
这就是 %r 格式的工作原理,它按照您编写的方式(或接近它的方式)打印它。这是用于调试的"raw"格式
然后我试了一下,但它对我有效!
我的代码:
# test %r with \n
print "test\n%r\n%r" % ("with", "works?")
# change a way to test it
print "%r\n%r" % ("with", "works?")
输出:
test
'with'
'works?'
'with'
'works?'
我很疑惑,是我的考试有问题还是书有问题?
你能给我举一些例子吗?非常感谢。
那不是您会看到 %r
效果的地方。将换行符 ('\n'
) 等转义字符放入将替换 %r
:
的字符串中
>>> print "%r\n%r" % ("with\n", "works?")
'with\n'
'works?'
现在用%s
代替str()
表示,而不是repr()
表示,看看区别:
>>> print "%s\n%s" % ("with\n", "works?")
with
works?
您将 原始字符串文字 与 %r
(repr()
) 字符串格式化程序混淆了。它们不是一回事。
您定义了一个字符串文字:
'This is a string with a newline\n'
这会生成一个字符串对象。然后,您将该字符串对象与 %
运算符一起使用,这使您可以根据放在 %
的 right-hand 侧的任何内容,将任何标记为 %
的占位符替换为值操作员。 %r
占位符使用 repr()
为给定对象生成字符串并将该字符串插入插槽。
如果您希望 \n
被解释为文字反斜杠和分隔 n
字符,请使用 原始字符串文字 ,前缀为 [=23] =]:
r'This is a string with a literal backslash and letter n: \n'
如果您希望%r
产生转义的(Python)语法,将换行符放入右边的值; repr()
string 产生字符串文字语法:
'This will show the string in Python notation: %r' % ('String with \n newline',)
这会获取 repr('String with \n newline')
的输出并将其插入到字符串中:
>>> 'String with \n newline'
'String with \n newline'
>>> repr('String with \n newline')
"'String with \n newline'"
>>> print repr('String with \n newline')
'String with \n newline'
>>> 'This will show the string in Python notation: %r' % ('String with \n newline',)
"This will show the string in Python notation: 'String with \n newline'"
>>> print 'This will show the string in Python notation: %r' % ('String with \n newline',)
This will show the string in Python notation: 'String with \n newline'
我正在学习学习 Python 艰难之路。这是练习9的学生常见问题
中的内容为什么我使用 %r 时 \n 换行不起作用?
这就是 %r 格式的工作原理,它按照您编写的方式(或接近它的方式)打印它。这是用于调试的"raw"格式
然后我试了一下,但它对我有效!
我的代码:
# test %r with \n
print "test\n%r\n%r" % ("with", "works?")
# change a way to test it
print "%r\n%r" % ("with", "works?")
输出:
test
'with'
'works?'
'with'
'works?'
我很疑惑,是我的考试有问题还是书有问题? 你能给我举一些例子吗?非常感谢。
那不是您会看到 %r
效果的地方。将换行符 ('\n'
) 等转义字符放入将替换 %r
:
>>> print "%r\n%r" % ("with\n", "works?")
'with\n'
'works?'
现在用%s
代替str()
表示,而不是repr()
表示,看看区别:
>>> print "%s\n%s" % ("with\n", "works?")
with
works?
您将 原始字符串文字 与 %r
(repr()
) 字符串格式化程序混淆了。它们不是一回事。
您定义了一个字符串文字:
'This is a string with a newline\n'
这会生成一个字符串对象。然后,您将该字符串对象与 %
运算符一起使用,这使您可以根据放在 %
的 right-hand 侧的任何内容,将任何标记为 %
的占位符替换为值操作员。 %r
占位符使用 repr()
为给定对象生成字符串并将该字符串插入插槽。
如果您希望 \n
被解释为文字反斜杠和分隔 n
字符,请使用 原始字符串文字 ,前缀为 [=23] =]:
r'This is a string with a literal backslash and letter n: \n'
如果您希望%r
产生转义的(Python)语法,将换行符放入右边的值; repr()
string 产生字符串文字语法:
'This will show the string in Python notation: %r' % ('String with \n newline',)
这会获取 repr('String with \n newline')
的输出并将其插入到字符串中:
>>> 'String with \n newline'
'String with \n newline'
>>> repr('String with \n newline')
"'String with \n newline'"
>>> print repr('String with \n newline')
'String with \n newline'
>>> 'This will show the string in Python notation: %r' % ('String with \n newline',)
"This will show the string in Python notation: 'String with \n newline'"
>>> print 'This will show the string in Python notation: %r' % ('String with \n newline',)
This will show the string in Python notation: 'String with \n newline'