日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中str函数_一文让你彻底搞懂Python中__str__和__repr__?

發布時間:2023/12/31 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中str函数_一文让你彻底搞懂Python中__str__和__repr__? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

__str__和__repr__的異同?

字符串的表示形式

我們都知道,Python的內置函數repr()能夠把對象用字符串的形式表達出來,方便我們辨認。這就是“字符串表示形式”。repr()就是通過__repr__這個特殊方法來得到一個對象的字符串表示形式的。如果沒有實現__repr__,當我們在控制臺里打印一個向量的實例時,得到的字符串可能會是 。

>>> class Example: pass

>>> print(str(Example()))

<__main__.Example object at 0x10a514f98>

>>> print(repr(Example()))

<__main__.Example object at 0x1088eb438>

>>>

>>> str(Example)

""

>>> repr(Example())

'<__main__.Example object at 0x1088eb438>'

__str__vs.__repr__

接下來我們看一看__str__和__repr__有哪些異同。根據Python官方文檔定義:

__str__:通過str(object)以及內置函數format()和print()調用以生成一個對象的“非正式”或格式良好的字符串表示。返回值必須是字符串對象。

__repr__:是由repr()內置函數調用,用來輸出一個對象的“官方”字符串表示。返回值必須是字符串對象,此方法通常被用于調試。內置類型 object 所定義的默認實現會調用 object.__repr__()。

什么正式與非正式格式,你已經搞懵了是嗎?沒事,我們接著看:

1. 兩者都能輸出對象

>>> x = 4

>>> repr(x)

'4'

>>> str(x)

'4'

>>> y = 'pythonic'

>>> repr(y)

"'pythonic'"

>>> str(y)

'pythonic'

>>> z = '4'

>>> repr(z)

"'4'"

>>> str(z) # 注意,此處的輸出結果形式跟str(x)一樣,但x和z的類型并不一樣

'4'

>>> str(x) == str(z)

True

>>> repr(x) == repr(z)

False

>>> str(4) == str("4")

True

>>> repr(4) == repr("4")

False

當x=4,當x為整數類型時,調用str()和repr()的返回結果是一樣,

而當y為字符串類型時,repr(y)的結果就是“正式”的字符串表示,而str(y)的結果則是“非正式”的。str()能夠讓我們最快速了解到對象的內容,可讀性較高。

2 .__str__是可讀的,__repr__的目標是明確的

>>> import datetime

>>> d = datetime.datetime.now()

>>> str(d)

'2020-04-04 20:47:46.525245'

>>> repr(d)

'datetime.datetime(2020, 4, 4, 20, 47, 46, 525245)'

>>>

可以看出repr()更能顯示出對象的類型、值等信息,對象描述清晰的。

在 str() 函數被使用,或是在用 print 函數打印一個對象的時候才被調用的,并且它返回的字符串對終端用戶更友好。

3. 重寫__repr__,那也會使用__str_

class Student():

def __init__(self, name):

self.name = name

def __str__(self):

return "Name:" + self.name

def __repr__(self):

return "姓名:" + self.name

class_one = Student("Alice")

print(class_one)

print(str(class_one))

print(repr(class_one))

輸出結果:

Name:Alice

Name:Alice

姓名:Alice

總結

共同點: 都是用來輸出一個對象

區別:

__str__ 的目標是可讀的,__str__()并不預期返回一個有效的 Python 表達式,但可以使用更方便或更準確的描述信息。

__repr__ 的目標是明確的,所返回的字符串應該準確、無歧義,并且盡可能表達出如何 用代碼創建出這個被打印的對象。

容器的 __str__ 方法的使用包含對象的 __repr__

參考資料:

總結

以上是生活随笔為你收集整理的python中str函数_一文让你彻底搞懂Python中__str__和__repr__?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。