python内建函数测试对象身份_Python学习笔记 03 Python对象
1、Python對象
Python對象都擁有三個特性:身份、類型和值。
身份:每一個對象都有一個唯一的身份標(biāo)識自己,任何對象的身份都可以使用內(nèi)建函數(shù)id()來得到。這個值可以被認(rèn)為是該對象的內(nèi)存地址。
類型:對象的類型決定了該對象可以保存什么類型的值,可以進(jìn)行什么樣操作,以及遵循什么樣的規(guī)則。可以使用內(nèi)建函數(shù)type()查看Python對象的類型。
值:對象表示的數(shù)據(jù)項。
常用的對象屬性是函數(shù)和方法,有一些Python類型也有數(shù)據(jù)屬性。含有數(shù)據(jù)屬性的對象包括:類、類實例、模塊、復(fù)數(shù)和文件。
2、標(biāo)準(zhǔn)類型
數(shù)字 整型 布爾型 長整型 浮點型 復(fù)數(shù)型 字符串 列表 元組 字典
3、其他內(nèi)建類型
(1)類型對象和type類型對象
Python類型本身也是對象。內(nèi)建函數(shù)type()。
>>> type(42)
>>> type(type(42))
所有的類型對象都是type,它也是所有Python類型的根和所有Python標(biāo)準(zhǔn)類的默認(rèn)元類(metaclass)。
(2)None—Python中的Null對象
Python有一個特殊的類型,稱為Null對象或NoneType,它只有一個值就是None。
它不支持任何運算,沒有任何內(nèi)建的方法。None和C語言中的void類型最接近,值接近于C語言中的Null。None沒有什么有用屬性,它的布爾值為False。
核心筆記:布爾值
所有的標(biāo)準(zhǔn)對象均可用于布爾測試,同類型的對象之間可以比較大小。每個對象天生具有布爾True或False值。空對象或值為零的任何數(shù)字或Null對象None的布爾值都是False。
下列對象的布爾值為False。
None
False(布爾類型)
所有值為零的數(shù)
0(整型)
0.0(浮點型)
0L(長整型)
0.0+0.0j(復(fù)數(shù))
“”空字符串
[]空列表
()空元組
{}空字典
非以上任何值的對象的布爾值都是True。
4、內(nèi)部類型
(1)代碼對象
代碼對象指編譯過的python源代碼片段,它是可執(zhí)行對象。通過調(diào)用內(nèi)建函數(shù)complie()可以得到代碼對象,代碼對象可以被exec命令或eval()內(nèi)建函數(shù)來執(zhí)行。
(2)幀對象
幀對象表示Python的執(zhí)行棧幀。幀對象包含python解釋器在運行時候所需要信息,它的屬性包括指向向一個幀的鏈接,正在執(zhí)行的代碼對象,本地以及全局名字字典以及當(dāng)前指令;每次函數(shù)調(diào)用都產(chǎn)生一個幀對象。
(3)跟蹤記錄對象
異常發(fā)生時候,一個包含對異常的棧跟蹤記錄的對象被創(chuàng)建。
(4)切片對象
當(dāng)Python使用切片語法時候就會產(chǎn)生切片對象。擴(kuò)展的切片語法允許對不同的索引切片操作包括步進(jìn)切片、多維切片和省略切片。多維切片的語法是sequence[start1:end1,start2:end2],或使用省略號,sequence[…,start1:end1]。切片對象也可以由內(nèi)建函數(shù)slice()。步進(jìn)切片允許利用第3個切片元素進(jìn)行切片,它的語法為sequence[起始索引:結(jié)束索引:步進(jìn)值]。
>>> fooster = 'abcde'
>>> foostr[::-1]
'edcba'
>>> foostr[::-2]
'eca'
>>> foolist = [123, 'xba', 342.2, 'abc']
>>> foolist[::-1]
['abc', 342.2, 'xba', 123]
(5)省略對象
省略對象用于擴(kuò)展的切片語法中,起記號作用。省略對象有一個唯一的名字Ellipsis,它的布爾值始終為True。
(6)XRange對象
內(nèi)建的xrange()函數(shù)會產(chǎn)生一個xrange對象,xrange()是內(nèi)建函數(shù)range()的兄弟版本,它可以節(jié)省內(nèi)存或產(chǎn)生range無法完成的超大數(shù)據(jù)集合。
5、標(biāo)準(zhǔn)類型操作符
(1)對象值的比較
比較運算符判斷同類型的對象是否相等,所有內(nèi)建類型都支持比較運算,比較運算返回布爾值。?多個比較運算符可以再同一行進(jìn)行,求值的順序為從左到右。
>>> 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)。
核心提示:
整數(shù)對象和字符串對象是不可變對象,python會高效的緩存他們。這會造成我們認(rèn)為python應(yīng)該創(chuàng)建新對象的時,它卻沒有。
>>> a = 1
>>> id(a)
19523112
>>> b = 1
>>> id(b)
19523112
>>>
>>> c = 1.0
>>> id(c)
33637528
>>> d = 1.0
>>> id(d)
19555384
但是不要在應(yīng)用程序中應(yīng)用這Python緩存的特性。
(3)布爾類型
按優(yōu)先級排列:not,and,or,分別表示邏輯非,邏輯與,邏輯或。
6、標(biāo)準(zhǔn)類型內(nèi)建函數(shù)
(1)type()
type()是工廠函數(shù)。type(object)返回對象的類型。
>>> type(4)
>>> type('Hello World')
(2)cmp()
內(nèi)建函數(shù)cmp()用于比較兩個對象obj1和obj2。cmp(obj1, obj2),結(jié)果返回一個整型。
如果obj1 < obj2,則返回一個負(fù)整型,如果obj1 > obj2,則返回一個正整型,
如果obj1 < obj2,則返回一個0。如果是用戶自定義對象,cmp()會調(diào)用該類的特殊方法_cmp_()。
>>> a, b = 4, 12
>>> cmp(a, b)
-1
(3)str()和repr()以及``操作符
內(nèi)建函數(shù)str()和repr()或反引號操作符(``)可以以字符串的方式獲取對象的內(nèi)容、類型、數(shù)值屬性等信息。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()函數(shù)可以減少函數(shù)調(diào)用的次數(shù),減少查詢次數(shù)。
7、類型工廠函數(shù)
原來的內(nèi)建轉(zhuǎn)換,像int()、type()、list()等,現(xiàn)在都成了工廠函數(shù)。貌似函數(shù)的類。調(diào)用的時候,實際上是生成了該類型的一個實例。
int() long(),float(),complex()
str() unicode(),basestring()
list() ,tuple()
type()
dict()
bool()
set()
frozenset()
object()
classmethod()
staticmethod()
super()
property()
file()
8、標(biāo)準(zhǔn)類型的分類
“基本”這些類型是python提供的標(biāo)準(zhǔn)或核心類型;
“內(nèi)建”是由于這些類型是python默認(rèn)提供的;
“數(shù)據(jù)”因為他們一般用于數(shù)據(jù)存儲;
“對象”因為對象是數(shù)據(jù)和功能的默認(rèn)抽象;
“原始”因為這些類型提供的是最底層的粒度數(shù)據(jù)存儲;
“類型”因為他們就是數(shù)據(jù)類型。
(1)存儲模型
標(biāo)量/原子類型??? 數(shù)值、字符串
容器類型??????? 列表、元組、字典
(2)更新模型
以可否改變作為分類標(biāo)準(zhǔn)。
可變類型???????? 列表、字典
不可變類型?????? 數(shù)字、字符串、元組
>>> x = 'Python'
>>> id(x)
19829920
>>> x = 'c++'
>>> id(x)
33462008
(3)訪問模型(首要區(qū)分)
直接訪問???????? 數(shù)字
順序訪問???????? 字符串、列表、元組
映射訪問???????? 字典
數(shù)據(jù)類型
存儲模型
更新模型
訪問模型
數(shù)字
標(biāo)量
不可更改
直接訪問
字符串
標(biāo)量
不可更改
順序訪問
列表
容器
可更改
順序訪問
元組
容器
不可更改
順序訪問
字典
容器
可更改
映射訪問
9、不支持的類型
char或byte
可以用字符串表示字符或8比特整數(shù)
沒有指針,在Python中,一切都是指針。
如果需要高精度的數(shù)字,可以采用Decimal類,必須導(dǎo)入decimal模塊。
在處理金錢這類確定的值時,Decimal類型很有用。在其他場合,一般float就夠用了。
總結(jié)
以上是生活随笔為你收集整理的python内建函数测试对象身份_Python学习笔记 03 Python对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 血型算法php,血型排行榜!(真的很准)
- 下一篇: python列表常用方法实践_pytho