學習《流暢的Python學習》 筆記02

2021-09-29 04:57:10 字數 2634 閱讀 9215

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 個特 殊方法中,只有absbool會報錯。此外,1.2.4 節定義的bool不會報錯。 ——編者注

repr所返回的字串應該準確、無歧義,並且盡可能表達出如何 用**建立出這個被列印的物件。因此這裡使用了類似呼叫物件構造器 的表達形式(比如 vector(3, 4) 就是個例子)。reprstr的區別在於,後者是在 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...