1. 程式人生 > >python基礎之%s和%r的區別

python基礎之%s和%r的區別

在python中,%s和%r的對應呼叫方法如下,它們都可以用來轉換字串。%s -> str%r -> repr其中,str的可讀性強,repr傾向於表明一個物件的詳細資訊。一般來說,在一個類中,__repr__一般都會又,__str__不一定有,而當__str__()函式沒有定義的時候,__repr__定義的話,呼叫str和repr一樣,即是str=repr。     看下面的例子,
>>> print(repr('hello'))
'hello'
>>>
>>> print(str('hello'))
hello  
>>> print(repr(1))
1
>>> print(str(1))

       str和repr列印字串的結果是不一樣的,那是因為它繼承的object.__repr__(self),轉換成"正式(official)"字串(反向引用),而object.__str__(self)是轉換成"非正式的(imfomal)", 但是列印int型別的是一樣的。

        使用eval()函式可以看出它們區別,repr返回的是有效的字串,而str返回的是無效的字串

>>> teststr = 'hello'
>>> repr(teststr)
"'hello'"
>>> str(teststr)
'hello'
>>> teststr2 = eval(repr(teststr))
>>> teststr == teststr2
True
>>>
>>> eval(str(teststr))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'hello' is not defined

     從例子可以看出,再eval()中,把str返回的字串當成了一個名字是'hello'的未定義變數名,而用repr返回的結果得到的字串物件teststr2和teststr是同一個物件。

再看看下面的例子,自定義一個類:

# coding=utf-8
class Foo(object):
    def __init__(self, foo):
        self.foo = foo

    def __repr__(self):
        return 'Foo(%r)' % self.foo

    def __str__(self):
        return self.foo

if __name__ == '__main__':
    test = Foo('hello')
    print(test)
    print('test instance,%%r is %r , %%s is %s' % (test, test))

輸出結果:

C:\Python36-32\python.exe D:/PythonLearning/PythonCore/test.py
hello
test instance,%r is Foo('hello') , %s is hello

當註釋__str__函式後,str和repr的輸出結果一樣的:

C:\Python36-32\python.exe D:/PythonLearning/PythonCore/test.py
Foo('hello')
test instance,%r is Foo('hello') , %s is Foo('hello')
在上面的基礎上註釋__repr__函式後,輸出結果:
C:\Python36-32\python.exe D:/PythonLearning/PythonCore/test.py
<__main__.Foo object at 0x052A0410>
test instance,%r is <__main__.Foo object at 0x052A0410> , %s is <__main__.Foo object at 0x052A0410>
     總結:str一般用於一個string顯示的友好,可以理解成該字串直接了當的告訴針使用者是什麼,而repr較為規範的表示string是程式設計師使用的。

相關推薦

python基礎%s%r區別

在python中,%s和%r的對應呼叫方法如下,它們都可以用來轉換字串。%s -> str%r -> repr其中,str的可讀性強,repr傾向於表明一個物件的詳細資訊。一般來說,在一個類

python 裡面的%s%r區別

雖然這兩個佔位符(pytho裡叫做格式符)用法相同,但是效果卻是不一樣的 %s是將變數傳到str()函式中,結果是將變數轉化適合人閱讀的格式 %r是將變數穿到repr()函式中,結果是將變數轉化成適合機器閱讀的格式,可以將%r後的變數理解為一個物件    

python基礎appendextend的區別

1.append a = [1,2,3] b=[1,2] a.append(b) ------------------------------------------------- a Out[60]: [1, 2, 3, [1, 2]] 將b作為整個元素append進去。 2.ext

Python 基礎列表元組

bcp rtt fcn ott emd lns swe 二維數組 ttf list Python內置的一種數據類型是列表:list。list是一種有序的集合,可以隨時添加和刪除其中的元素。 比如,列出班裏所有同學的名字,就可以用一個list表示: >>

python基礎dictset

算法 dict name 區別 刪除元素 哈希算法 div 數學 blog dict dict是dictionary的縮寫,python內置了字典,在其他語言中也稱為map,使用鍵值對儲存,具有極快的查找速度。 如果是只用list來實現,就需要兩個list,先在第一個lis

Java基礎intInteger區別

1、int和Integer的區別 1、Integer是int的包裝類,int則是java的一種基本資料型別  2、Integer變數必須例項化後才能使用,而int變數不需要  3、Integer實際是物件的引用,當new一個Integer時,實際上是生成一個指標指向此物件;而

Python面試 is == 的區別

面試實習生的時候,當問到 is 和 == 的區別時,很多同學都答不上來,搞不清兩者什麼時候返回一致,什麼時候返回不一致。本文我們來看一下這兩者的區別。 我們先來看幾個例子: 上面的輸出結果中為什麼有的 is 和 == 的結果相同,有的不相同呢?我們來看下官方文件中對於 is 和

Python 基礎運算子基本資料型別

1. 運算子 1.1 結果是具體值(數字或字串)的運算子1.1.1 算數運算1.1.2 賦值運算 1.2 結果是布林值的運算子1.2.1 比較運算 1.2.2 邏輯運算 1.2.3 成員運算 2. 基本資料型別入門2.1 字串2.1.1 字串介紹在 python 中,字串可以用單引號、雙引號、三個單引號和

python 中的%s%r、str.format()函式

%r是repr %s就是str >>> print '%r' % 'a' 'a' >>> print '%s' % 'a' a >>> class

python教程1:Python基礎數據類型變量、字符串編碼

mos 指向 character 文本編輯 字符 支持 isp michael 多個   視頻鏈接:   我是在Linux下玩python的,Linux下默認安裝python,直接打個pyhon3就好了,python大小寫敏感   我們來寫第一個簡單的pyt

python基礎名稱空間作用域、函數嵌套

空間 dir pri 引用 value log 關系 fun ret 一、名稱空間 1、定義:存放名字與值的綁定關系 2、名稱空間分為:內置名稱空間、全局名稱空間、局部名稱空間 內置名稱空間:python解釋器自帶的名字,python解釋器啟動就會生成 全局名稱空間:文件級

python基礎流程控制、數字字符串處理

== python基礎 you else upper python3 統計 包含 文件 流程控制 條件判斷 if單分支:當一個“條件”成立時執行相應的操作。 語法結構: if 條件: command 流程圖: 示例:如果3大於2,那麽輸出字符串"very

python基礎面向對象編程介紹、類對象

屬於 func 每次 基礎 lang 屬性字典 位置 需求 內部 面向對象變成介紹 面向過程編程 核心是過程(流水線式思維),過程即解決問題的步驟,面向過程的設計就好比精心設計好一條流水線,考慮周全什麽時候處理什麽東西。主要應用在一旦完成很少修改的地方,如linux內核、g

python基礎繼承組合應用、對象序列化反序列化,選課系統綜合示例

sel 初始 否則 通用 __init__ period 類型 反序列化 信息 繼承+組合應用示例 1 class Date: #定義時間類,包含姓名、年、月、日,用於返回生日 2 def __init__(self,name,year,mon,day):

python基礎多態與多態性、綁定方法非綁定方法

info lib img 感知 animal user save python基礎 assm 多態與多態性 多態 多態並不是一個新的知識 多態是指一類事物有多種形態,在類裏就是指一個抽象類有多個子類,因而多態的概念依賴於繼承 舉個栗子:動物有多種形態,人、狗、貓、豬等,py

python基礎用戶交互註釋

增加 可讀性 ttr pre 代碼塊 lex 多少 exceptio nts 一、什麽是用戶交互 用戶交互就是應用程序可以接收用戶的外部輸入,並將輸入的數據作為程序後續運行的參數。 二、為什麽要有用戶交互 比如一個人去銀行取錢,他跟銀行櫃員說要取多少錢,櫃員會把

python基礎條件判斷循環

... 1-1 跳過 else if 生成 pre name code 條件判斷 1.條件判斷 age = 3 if age >= 18: print(‘adult‘) elif age >= 6: print(‘teenager‘) else:

python基礎叠代器生成器

see per n) attribute product 原本 狀態 區別 開發 假如我現在有一個列表l=[‘a‘,‘b‘,‘c‘,‘d‘,‘e‘],我想取列表中的內容,有幾種方式? 首先,我可以通過索引取值l[0],其次我們是不是還可以用for循環來取值呀? 你有沒有仔細

python基礎數據類型數值類型

字符 str 大數據 值類型 ring dict nbsp 數值 不可變 python3的六大數據類型: 1、tuple元組 2、number數字 3、string字符串 4、set集合 5、list列表 6、dictionary字典 其中不可變數據3個:tuple、num

Python基礎變量變量實現的簡單乘法運算

組成 地方 它的 其它 命名 現在 ima 意思 image 上篇我們知道了關於python的一個hello world的簡單程序代碼,現在我們來了解關於python裏面的變量,我們來了解下,變量是什麽? 變量:變量是為了存儲程序運算過程中的一些中間結果,為了方便之後的調用