python基礎之%s和%r的區別
>>> 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基礎之append和extend的區別
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基礎之dict和set
算法 dict name 區別 刪除元素 哈希算法 div 數學 blog dict dict是dictionary的縮寫,python內置了字典,在其他語言中也稱為map,使用鍵值對儲存,具有極快的查找速度。 如果是只用list來實現,就需要兩個list,先在第一個lis
Java基礎之int和Integer區別
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裏面的變量,我們來了解下,變量是什麽? 變量:變量是為了存儲程序運算過程中的一些中間結果,為了方便之後的調用