簡體   English   中英

在Python中打印unicode字符串列表時,為什么會得到u“ xyz”格式?

[英]Why do I get the u“xyz” format when I print a list of unicode strings in Python?

請觀察以下行為:

a = u"foo"
b = u"b\xe1r"   # \xe1 is an 'a' with an accent
s = [a, b]

print a, b
print s
for x in s: print x,

結果是:

foo bár
[u'foo', u'b\xe1r']
foo bár

當我只打印變量ab的兩個值時,我得到了期望的結果; 當我將字符串值放在列表中並打印時,會得到不需要的u"xyz"形式; 最終,當我使用循環從列表中打印值時,我再次得到第一個表格。 有人可以解釋這種看似奇怪的行為嗎? 我知道可能有一個很好的理由。

當您打印列表時,您會獲得每個元素的repr() ,實際上並不是要打印列表,因此python會嘗試打印代表其結構的內容。

如果要以任何特定方式設置其格式,請明確說明其設置方式,或重寫__repr__方法。

Python中的對象有兩種轉換成字符串的方式:大致來說,str()產生人類可讀的輸出,而repr()產生計算機可讀的輸出。 當您打印某些內容時,它會使用str()。

但是列表的str()使用其元素的repr()。

之所以會這樣,是因為列表可以包含任意數量的混合類型的元素。 在第二種情況下,不是打印unicode字符串,而是打印列表本身 -與打印列表內容非常不同。

由於列表可以包含任何內容,因此您可以使用u'foo'語法。 如果您使用的是非unicode字符串,那么也會看到'foo'而不是foo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM