Python學習筆記_Python對象

來源:互聯網
上載者:User

標籤: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)是對使用者比較友好 , 但是許多情況下strrepr的輸出都是一樣的

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對象

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.