2016-01-06 56 views
1

我在學習Python的艱難之路。這裏是exercise9的常見學生問題中的內容Python中格式化程序%r和 n發生了什麼?

爲什麼\ n換行符在我使用%r時不起作用?

這就是%r格式化的工作方式,它以您寫它(或接近它)的方式打印它。這是用於調試的「原始」格式

然後我嘗試了它,但它對我有用!

我的代碼:

# 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?' 

它混淆了我,是有什麼錯我的測試或這本書嗎? 你能告訴我一些例子嗎?非常感謝。

+3

你想到了'\ N'不被解釋爲換行符?您正在將字符串語法本身插入的值混淆。 –

回答

3

這不是你會看到%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? 
1

你很混淆原始字符串文字%rrepr())字符串格式化程序。它們不是同一件事。

你定義一個字符串:

'This is a string with a newline\n' 

這將產生一個字符串對象。然後,您將該字符串對象與%運算符一起使用,該運算符可讓您用任何%運算符的右側替換任何%標記的佔位符。 %r佔位符使用repr()爲給定對象生成一個字符串並將該字符串插入到插槽中。

如果您預計\n被解釋爲一個反斜槓和獨立n字符,使用原始字符串字面,通過r前綴:

r'This is a string with a literal backslash and letter n: \n' 

如果您預計%r產生逃脫(蟒蛇)語法,將換行符置於右側的值; repr()串產生字符串文字語法:

'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' 
+0

非常感謝。 –