1. 程式人生 > >python中的str和repr函數的區別

python中的str和repr函數的區別

展示 利用 了解 用戶 統計 ets 工具 doc value

看了一些網上的解釋,最主流的解釋是“str是給人看的,repr是給機器看的”,如果已經理解了的,這句話是對的,但是是有問題的,對於沒懂的,這句話是無法理解的。

我來嘗試解釋一下。先直譯一下官方文檔:

repr(object)

Return a string containing a printable representation of an object. For many types, this function makes an attempt to return a string that would yield an object with the same value when passed to eval()

, otherwise the representation is a string enclosed in angle brackets that contains the name of the type of the object together with additional information often including the name and address of the object. A class can control what this function returns for its instances by defining a __repr__() method.

返回一個字符串,這個字符串包含了一個對象的可打印表示。對於很多類型來講,這個函數試圖返回一個對象的字符串,這個字符串傳入eval()以後返回的值,與這個對象相等,除非這個“表示”是那種被角括號包圍的、包含了對象的類型名稱的、還有一些附加信息通常是對象的地址和名稱的字符串。一個類可以通過定義__repr__()方法來控制這個函數的返回值。

python是個盡量實現用戶友好的語言,盡量讓它簡單簡單再簡單,盡量讓它不出錯,無論怎樣搞都有結果,而且那結果是用戶常用的。

使用C、C++、Java、C#、PHP等語言的人,基本上沒有例外,都是程序猿、開發者,多少了解一些計算機的底層知識和原理,知道類、地址、變量等等,我們稱之為開發者。而使用python的,還有另一類人,他們不是計算機科班,也不是搞開發的,他們是數據科學家、數據分析師、人工智能研究者等等,他們的專業可能是數學、物理、心理學、統計學、文學等等,他們可能不了解計算機底層知識(也不需要了解),他們只是使用一種工具,我們稱之為用戶。打個比方,如果我的目的是去另外一個城市,我可以選擇開車、坐汽車、火車、飛機、輪船等等交通工具,C、C++、Java、C#、PHP這些就是開車,而python,就是坐火車(還不能比作飛機,它有點慢),只要買張到到目的地的票,剩下的事情不用管了,我不需要知道怎樣啟動火車怎樣加速怎樣剎車。而Java等語言,需要知道。所以Java等是開發者友好的,而python是用戶友好的。這也是為什麽近些年來隨著數據量的增大網絡傳輸速度的增加,python越來越火的原因,因為它簡單。

說了這麽多的目的就是為了說明,str是面向用戶的,給用戶展示的是結果,repr是面向開發者的,展示的是更詳細的描述。一個是結果,一個是描述,如果你想知道得更多,請用repr。

下面是引用的文章中的例子,很能說明問題:

>>> class A:
    pass
 
>>> a1 = A()
>>> a1
<__main__.A object at 0x000000000302C358>
 
>>> print(a1)
<__main__.A object at 0x000000000302C358>
 
 
>>> class A:
    def __str__(self):        #__str__使用:被打印的時候需要以字符串的形式輸出的時候,就會找到這個方法,並將返回值打印出來
        return "我是一個字符串"                                                                      
#要想顯示對象的屬性,可以(1)return 後加上你想要格式化輸出的屬性,比如: return "%d %s" % (int("123"), str(123))                                                                   
#(2)利用字符串的format方法,比如:"{},{}".format(1,2)    
>>> a1 = A()
>>> a1
<__main__.A object at 0x00000000033712E8>
 
>>> print(a1)

>>> import datetime
>>> today = datetime.datetime.now()
>>> str(today)
2012-03-14 09:21:58.130922
>>> repr(today)
datetime.datetime(2012, 3, 14, 9, 21, 58, 130922)
---------------------

作者:在到處之間找我 
來源:CSDN 
原文:https://blog.csdn.net/sinat_41104353/article/details/79254149 
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

這個解釋還是蠻靠譜的。

https://blog.csdn.net/sinat_41104353/article/details/79254149#%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A3

python中的str和repr函數的區別