1.2.2 字串表示形式
python 有乙個內建的函式叫 repr,它能把乙個物件用字串的形式表 達出來以便辨認,這就是「字串表示形式」。repr 就是通過repr這個特殊方法來得到乙個物件的字串表示形式的。如果沒有實現repr,當我們在控制台裡列印乙個向量的例項時,得到的字串 可能會是 。 互動式控制台和除錯程式(debugger)用 repr 函式來獲取字串表示 形式;在老的使用 % 符號的字串格式中,這個函式返回的結果用來代 替 %r 所代表的物件;同樣,str.format 函式所用到的新式字串格 式化語法(也是利用了 repr,才把 !r 字段變成字串。
def
__repr__
(self)
:return
'vector(%r, %r)'
%(self.x, self.y)
!符號,這個只在fromat中有用,要注意方法。但是效果類似
a =
'123'
b ='hello, '
.format
(a)print
(b)# hello, '123'
而下面這種寫法則報錯
a =
'123'
# b = 'hello, '.format(a)
b ='hello, !r'
%'123'
print
(b)
報錯
traceback (most recent call last)
: file "c:/users/mengy/downloads/weixin-master/weixin-master/test.py"
, line 3,in
b ='hello, !r'
%'123'
typeerror:
notall arguments converted during string formatting
在repr的實現中,我們用到了 %r 來獲取物件各個屬性的標準字符串表示形式——這是個好習慣,它暗示了乙個關鍵:vector(1, 2) 和 vector(『1』, 『2』) 是不一樣的,後者在我們的定義中會報錯,因為向量物件的建構函式只接受數值,不接受字串 。
實際上,vector 的建構函式接受字串。而且,對於使用字串構造的 vector,這 6 個特 殊方法中,只有abs和bool會報錯。此外,1.2.4 節定義的bool不會報錯。 ——編者注
repr所返回的字串應該準確、無歧義,並且盡可能表達出如何 用**建立出這個被列印的物件。因此這裡使用了類似呼叫物件構造器 的表達形式(比如 vector(3, 4) 就是個例子)。repr和str的區別在於,後者是在 str() 函式被使用,或 是在用 print 函式列印乙個物件的時候才被呼叫的,並且它返回的字串對終端使用者更友好。
如果你只想實現這兩個特殊方法中的乙個,repr是更好的選擇, 因為如果乙個物件沒有str函式,而 python 又需要呼叫它的時 候,直譯器會用repr作為替代。總結一下:
%r用rper()方法處理物件,%r列印時能夠重現它所代表的物件或者說直接反應物件本體
%s用str()方法處理物件
print
("i am %d years old."%22
)print
("i am %s years old."%22
)print
("i am %r years old."%22
)# i am 22 years old.
a =
"i am %s years old."%22
print
("i sad %r"
% a)
#i sad 'i am 22 years old.'
print
('i sad %s'
%a)#i sad i am 22 years old.
注意:列印結果 %r 比 %s 多一對引號
import datetime
d = datetime.date.today(
)print
("%s"
% d)
#2019-10-31
print
("%r"
% d)
#datetime.date(2019, 10, 31)
此處借鑑:博文 學習《流暢的Python學習》 筆記03
2.8.1 用bisect來搜尋 import bisect import sys haystack 1 4,5 6,8 12,15 20,21 23,23 26,29 30 needles 0 1,2 5,8 10,22 23,29 30,31 row fmt defdemo bisect fn ...
《流暢的python》學習筆記(三)
字典是python的基石 除dict外,有其他好用的如defaultdict orderedict chainmap counter 屬於collections模組 字典提供了多種構造方法,比如 a dict one 1,two 2,three 3 b c dict zip one two thre...
流暢的python學習1
usr bin env python3 coding utf 8 created on mon apr 20 21 08 08 2020 author root import collections card collections.namedtuple card rank suit class f...