python内建函数测试对象身份_Python学习笔记 03 Python对象
1、Python對象
Python對象都擁有三個特性:身份、類型和值。
身份:每一個對象都有一個唯一的身份標識自己,任何對象的身份都可以使用內建函數id()來得到。這個值可以被認為是該對象的內存地址。
類型:對象的類型決定了該對象可以保存什么類型的值,可以進行什么樣操作,以及遵循什么樣的規則。可以使用內建函數type()查看Python對象的類型。
值:對象表示的數據項。
常用的對象屬性是函數和方法,有一些Python類型也有數據屬性。含有數據屬性的對象包括:類、類實例、模塊、復數和文件。
2、標準類型
數字 整型 布爾型 長整型 浮點型 復數型 字符串 列表 元組 字典
3、其他內建類型
(1)類型對象和type類型對象
Python類型本身也是對象。內建函數type()。
>>> type(42)
>>> type(type(42))
所有的類型對象都是type,它也是所有Python類型的根和所有Python標準類的默認元類(metaclass)。
(2)None—Python中的Null對象
Python有一個特殊的類型,稱為Null對象或NoneType,它只有一個值就是None。
它不支持任何運算,沒有任何內建的方法。None和C語言中的void類型最接近,值接近于C語言中的Null。None沒有什么有用屬性,它的布爾值為False。
核心筆記:布爾值
所有的標準對象均可用于布爾測試,同類型的對象之間可以比較大小。每個對象天生具有布爾True或False值。空對象或值為零的任何數字或Null對象None的布爾值都是False。
下列對象的布爾值為False。
None
False(布爾類型)
所有值為零的數
0(整型)
0.0(浮點型)
0L(長整型)
0.0+0.0j(復數)
“”空字符串
[]空列表
()空元組
{}空字典
非以上任何值的對象的布爾值都是True。
4、內部類型
(1)代碼對象
代碼對象指編譯過的python源代碼片段,它是可執行對象。通過調用內建函數complie()可以得到代碼對象,代碼對象可以被exec命令或eval()內建函數來執行。
(2)幀對象
幀對象表示Python的執行棧幀。幀對象包含python解釋器在運行時候所需要信息,它的屬性包括指向向一個幀的鏈接,正在執行的代碼對象,本地以及全局名字字典以及當前指令;每次函數調用都產生一個幀對象。
(3)跟蹤記錄對象
異常發生時候,一個包含對異常的棧跟蹤記錄的對象被創建。
(4)切片對象
當Python使用切片語法時候就會產生切片對象。擴展的切片語法允許對不同的索引切片操作包括步進切片、多維切片和省略切片。多維切片的語法是sequence[start1:end1,start2:end2],或使用省略號,sequence[…,start1:end1]。切片對象也可以由內建函數slice()。步進切片允許利用第3個切片元素進行切片,它的語法為sequence[起始索引:結束索引:步進值]。
>>> fooster = 'abcde'
>>> foostr[::-1]
'edcba'
>>> foostr[::-2]
'eca'
>>> foolist = [123, 'xba', 342.2, 'abc']
>>> foolist[::-1]
['abc', 342.2, 'xba', 123]
(5)省略對象
省略對象用于擴展的切片語法中,起記號作用。省略對象有一個唯一的名字Ellipsis,它的布爾值始終為True。
(6)XRange對象
內建的xrange()函數會產生一個xrange對象,xrange()是內建函數range()的兄弟版本,它可以節省內存或產生range無法完成的超大數據集合。
5、標準類型操作符
(1)對象值的比較
比較運算符判斷同類型的對象是否相等,所有內建類型都支持比較運算,比較運算返回布爾值。?多個比較運算符可以再同一行進行,求值的順序為從左到右。
>>> 2 == 2
True
>>> 2.46 <= 8.33
True
>>> 'abc' == 'xyz'
False
>>> 'abc' < 'xyz'
True
>>> [3, 'abc'] == ['abc', 3]
False
>>> [3, 'abc'] == [3, 'abc']
True
>>> 3 < 4 <7
True
>>> 4 > 3 == 3
True
(2)對象身份的比較
變量可以看作對象的鏈接。foo1 = foo2 = 4.3,foo1和foo2指向相同的對象。
若foo2 = fool或foo2=3+1.3,則它們不指向同一對象。
Python提供了is和is not操作符來測試兩個變量是否指向同一個對象。
a is b等價于id(a) == id(b)。
核心提示:
整數對象和字符串對象是不可變對象,python會高效的緩存他們。這會造成我們認為python應該創建新對象的時,它卻沒有。
>>> a = 1
>>> id(a)
19523112
>>> b = 1
>>> id(b)
19523112
>>>
>>> c = 1.0
>>> id(c)
33637528
>>> d = 1.0
>>> id(d)
19555384
但是不要在應用程序中應用這Python緩存的特性。
(3)布爾類型
按優先級排列:not,and,or,分別表示邏輯非,邏輯與,邏輯或。
6、標準類型內建函數
(1)type()
type()是工廠函數。type(object)返回對象的類型。
>>> type(4)
>>> type('Hello World')
(2)cmp()
內建函數cmp()用于比較兩個對象obj1和obj2。cmp(obj1, obj2),結果返回一個整型。
如果obj1 < obj2,則返回一個負整型,如果obj1 > obj2,則返回一個正整型,
如果obj1 < obj2,則返回一個0。如果是用戶自定義對象,cmp()會調用該類的特殊方法_cmp_()。
>>> a, b = 4, 12
>>> cmp(a, b)
-1
(3)str()和repr()以及``操作符
內建函數str()和repr()或反引號操作符(``)可以以字符串的方式獲取對象的內容、類型、數值屬性等信息。str(ob)返回對象適合可讀性好的字符串表示。repr(obj)或`obj`返回一個對象的字符串表示,可以重新獲得該對象,通常obj == eval(repr(obj))。
(4)type()和isinstance()
1 #!/usr/bin/env python2
3 def displayNumType(num):
4 print num, 'is',
5 if isinstance(num, (int, long, float, complex)):
6 print 'a number of type:', type(num).__name__
7 else:
8 print 'not a number at all!!'
9
10 displayNumType(-69)
11 displayNumType(9999999999999999999999L)
12 displayNumType(98.6)
13 displayNumType(-5.2+1.9j)
14 displayNumType('xxx')
輸出:
-69 is a number of type: int
9999999999999999999999 is a number of type: long
98.6 is a number of type: float
(-5.2+1.9j) is a number of type: complex
xxx is not a number at all!!
>>> help(isinstance)
Help on built-in function isinstance in module __builtin__:
isinstance(...)
isinstance(object, class-or-type-or-tuple) -> bool
Return whether an object is an instance of a class or of a subclass thereof.
With a type as second argument, return whether that is the object's type. The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for
isinstance(x, A) or isinstance(x, B) or ... (etc.).
由此可見,isinstance()函數可以減少函數調用的次數,減少查詢次數。
7、類型工廠函數
原來的內建轉換,像int()、type()、list()等,現在都成了工廠函數。貌似函數的類。調用的時候,實際上是生成了該類型的一個實例。
int() long(),float(),complex()
str() unicode(),basestring()
list() ,tuple()
type()
dict()
bool()
set()
frozenset()
object()
classmethod()
staticmethod()
super()
property()
file()
8、標準類型的分類
“基本”這些類型是python提供的標準或核心類型;
“內建”是由于這些類型是python默認提供的;
“數據”因為他們一般用于數據存儲;
“對象”因為對象是數據和功能的默認抽象;
“原始”因為這些類型提供的是最底層的粒度數據存儲;
“類型”因為他們就是數據類型。
(1)存儲模型
標量/原子類型??? 數值、字符串
容器類型??????? 列表、元組、字典
(2)更新模型
以可否改變作為分類標準。
可變類型???????? 列表、字典
不可變類型?????? 數字、字符串、元組
>>> x = 'Python'
>>> id(x)
19829920
>>> x = 'c++'
>>> id(x)
33462008
(3)訪問模型(首要區分)
直接訪問???????? 數字
順序訪問???????? 字符串、列表、元組
映射訪問???????? 字典
數據類型
存儲模型
更新模型
訪問模型
數字
標量
不可更改
直接訪問
字符串
標量
不可更改
順序訪問
列表
容器
可更改
順序訪問
元組
容器
不可更改
順序訪問
字典
容器
可更改
映射訪問
9、不支持的類型
char或byte
可以用字符串表示字符或8比特整數
沒有指針,在Python中,一切都是指針。
如果需要高精度的數字,可以采用Decimal類,必須導入decimal模塊。
在處理金錢這類確定的值時,Decimal類型很有用。在其他場合,一般float就夠用了。
總結
以上是生活随笔為你收集整理的python内建函数测试对象身份_Python学习笔记 03 Python对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 血型算法php,血型排行榜!(真的很准)
- 下一篇: STM32-串口接收、发送数据实验-程序