標籤:python 對象
- Python學習筆記_Python對象
- Python對象
- 標準類型
- 其他內建類型
- 類型對象和type類型對象
- Python的Null對象None
- 標準類型操作符
- 標準類型的內建函數
- typeObj
- cmpobj1 obj2
- strobj reprobj
- typeobj isinstanceobj
- 標準類型的分類
- 不支援的類型
Python學習筆記_Python對象
首先來理解一個通俗的含義,什麼是對象
?其實對象無論在什麼語言裡面,比如C++
,Python
裡面都是指一塊有類型的記憶體,對象裡面存放著相應的資料
Python對象
所有的Python對象都有三個特性:身份
,類型
,值
- 身份
:每一個對象都有唯一的一個身份ID來標識自己,就像該對象在記憶體中的儲存地址一樣,是唯一的,不可共用的。任何對象的身份標識符都可以用內建函數id()
來得到
x=1print id(x)#運行結果:163449008
類型
:因為Python是動態類型的,所以一個對象裡面就應該儲存該對象的類型來決定該對象而已進行一些什麼樣的操作。我們可以通過內建函數type()
來得到對象的類型
number1 = 1str1 = ‘Hello World‘print type(number1)print type(str1) #運行結果#<type ‘int‘>#<type ‘str‘>
值
:對象表示的資料項目,我們在記憶體裡面無差別的儲存資料,假如我們在記憶體裡面儲存的是1000001
,如果是str
類型,那麼就解釋為‘A‘
,如果是整形,就解釋為65
對象屬性: 某些對象有屬性,值或者相關聯的可執行代碼,最常見的屬性是函數和方法
標準類型
- 數字
Integer
整形
Boolean
布爾型
Long integer
長整形
Floating point real number
浮點型
Complex number
複數型
String
字串
List
列表
Tuple
元組
Dictionarry
字典
其他內建類型
- 類型
- Null對象 (None)
- 檔案
- 集合/固定集合
- 函數/方法
- 模組
- 類
類型對象和type類型對象
之前提到過,對象通過類型來判斷自己可以執行那些操作,那麼類型就是用來儲存這些操作最佳場所,所以相對於字串來說,用一個對象來描述一個類型更為適合。
type()
內建函數返回一個type對象,只不過這個對象被以字串的形式展現出來
print type(10)print type(type(10))#運行結果:#<type ‘int‘>#<type ‘type‘>
所有類型對象的類型都是type
,它也是所有類型的根和所有Python標準類的預設元類。
Python的Null對象——None
None
只有一個值,它不支援任何運算,沒有任何內建方法。
每個對象天生具有True
或者False
值。
下面對象的布爾值是False
:
- None
- False
- 所有值為0的數
- 0
- 0.0
- 0L
- 0.0+0.0j
- “”
- []
- ()
- {}
除了上面的值,其他值都是True
標準類型操作符對象值的比較
對象值的比較會直接返回一個Bool對象,各種類型的對象的比較方法也不同。,數字類型的根據數值的大小和符號比較,字串按照字元序列進行比較等等
對象身份比較
在python裡面,一般都是首先在記憶體中建立一個對象,然後再將這個對象的引用賦值給變數,通過引用對對象進行操作。
x = 3.14 # 建立一個3.14浮點型對象,並將引用賦值給變數x
在許多情況下,一個對象的引用會傳給對個變數,為了檢測兩個變數是否同時指向同一個變數,我們可以用內建函數id()
來比較兩個變數指向對象的id
是否相等,或者使用is
或者is not
來比較兩個變數是否指向同一個對象
舉個栗子:
x = 3.14y = xprint id(x) == id(y)print x is y # 和 id(x) == id(y) 一樣print x is not y # 和 id(x) != id(y) 一樣
運行結果:
True
True
False
舉個栗子:
x = 3.14y = 1.0 + 2.14print x is y # 雖然數值相同,但是並不指向同一個對象
運行結果:
False
布爾類型
當多個布爾條件需要通手機進行判斷時,Python
為我們提供了下面幾個語句
操作符 |
功能 |
and |
邏輯與 |
or |
邏輯或 |
not |
邏輯非 |
標準類型的內建函數
除了操作符,Python
還提供了一些內建函數用於這些基本資料:
函數 |
功能 |
cmp(obj1 , obj2) |
比較兩個對象是否相等 |
repr(obj) |
返回一個對象的字串表示 |
str(obj) |
以可讀性良好的為目的返回一個對象的字串表示 |
type(obj) |
返回對象的類型,返回的類型是一個類型對象 |
type(Obj)
type()
內建函數是用來返回一個對象的類型的
print type(1)print type(‘Hello World‘)
運行結果:
cmp(obj1 , obj2)
cmp(obj1 , obj2)
是用來比較兩個對象的
返回結果 |
比較情形 |
正整數 |
obj1 > obj2 |
0 |
obj1 = obj2 |
負整數 |
obj1 < obj2 |
上面比較返回的數值可以理解為 obj1 - obj2
返回的結果
舉個栗子:
x, y = 1, 2print cmp(x, y)# 運行結果: -1
str1, str2 = ‘xyz‘, ‘abc‘print cmp(str1, str2)# 運行結果: 1
str(obj) & repr(obj)
上面的兩個內建函數str(obj)
和repr(obj)
都是返回一個對象的字串,但是這兩個內建函數又有所不同:
str(obj)
:是用來返回一個可讀性好的字串,面向的使用者是程式員
repr(obj)
:是用來返回一個Python虛擬機器
看得懂的字串,面向的使用者是Python虛擬機器
,repr(obj)
返回的字串可以通過eval(str)
重新求值!即這個式子是成立obj == eval(repe(obj))
總的來說,就是repr(obj)
是對Python比較友好
, str(obj)
是對使用者比較友好 , 但是許多情況下str
和repr
的輸出都是一樣的
print str(1)print repr(1)#運行結果:#1#1
type(obj) & isinstance(obj)
type(obj)
可以返回任意Python
對象的類型,而不僅局限於標準類型
舉個栗子:
對於標準類型
print type(‘‘)#運行結果: <type ‘str‘>print type({})#運行結果: <type ‘dict‘>
對於自訂類型
class Foo: passfoo = Foo()class Bar(object): passbar = Bar()print type(Foo)#運行結果 : <type ‘classobj‘>print type(foo)#運行結果 : <type ‘instance‘>print type(Bar)#運行結果 : <type ‘type‘>print type(bar)#運行結果 : <type ‘__main__.Bar‘>
如果現在我們需要確定一個對象的類型,我們可以採用下面的語句進行判斷:
#方式1if type(num) == type(0):...#方式2import typesif type(num) == types.IntType:...#方式3if type(num) is types.IntType:... # 因為在運行時只有一個對象來表示整形類型#方式4from types import IntTypeif type(num) is IntType:...#方式5if isinstance(num , int):...
標準類型的分類
有三種不同的模型可以協助我們對基本類型進行分類:
儲存模型
儲存模型裡面我們按照類型的對象可以儲存多找個對象分為兩類:
- 標量儲存類型:只能儲存單個字面對象的類型
- 容器儲存類型:可以容納多個對象的類型
分類 |
python類型 |
標量存類型 |
數值(所有數實值型別) ,字串(全部是文字,因為python沒有字元類型) |
容器類型 |
列表 , 元組 , 字典 |
更新模型
在python
裡面類型分為可以更改是不可以更改兩種類型,運行更改的對象允許他們的值發生變化,而不可更改的對象則不允許他們的值變更
分類 |
Python類型 |
可變類型 |
列表,字典 |
不可變類型 |
數字,字串 ,元組 |
什嗎?數字和字串是不可以更改的?那下面這個更改又是怎麼回事?
str1 = ‘Hello World‘str1 = ‘Hello Moto‘
不錯,上面的變數的值的確發生了改變,但是變數不代表對象,第一次賦值是將‘Hello World‘
的引用賦值給str1
,而第二隻指派陳述式則是將‘Hello Moto‘
的引用賦值給str1
,兩個字串對象‘Hello World‘
和‘Hello Moto‘
的值是沒有發生改變的!
訪問模型
在訪問模型中共有三種訪問方式:直接存取
,順序
和映射
- 直接存取:對非容器物件都可以直接存取
- 序列訪問:容器內的元素可以從0開始的索引順序訪問
- 映射訪問: 通過一個唯一的鍵來訪問
分類 |
Python類型 |
直接存取 |
數字 |
順序訪問 |
字串, 元組, 列表 |
映射訪問 |
字典 |
不支援的類型
Python
裡面有一些常見但是不支援的類型:
- char和byte
- 指標
- int, short, long
- 單精確度浮點數
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Python學習筆記_Python對象