python语法笔记(五)
1、python內(nèi)存管理?
(1)對象內(nèi)存使用?
&nsbp;&nsbp;&nsbp;&nsbp;在python中通過執(zhí)行內(nèi)建函數(shù) id(obj) 可以獲得對象obj在內(nèi)存中的地址。在python中,整數(shù)和短小的字符,python都會緩存這些對象,以便重復(fù)使用。當(dāng)我們創(chuàng)建多個等于1的引用時,實際上是讓所有這些引用指向同一個對象。
????python中,通過is關(guān)鍵字可以判斷兩個引用是否指向同一個對象,即 obj1 is obj2 <===> id(obj1) 是否等于 id(obj2)
# True a = 1 b = 1 print(a is b)# True a = "good" b = "good" print(a is b)# False a = "very good morning" b = "very good morning" print(a is b)# False a = [] b = [] print(a is b)由于Python緩存了整數(shù)和短字符串,因此每個對象只存有一份。比如,所有整數(shù)1的引用都指向同一對象。 即使使用賦值語句,也只是創(chuàng)造了新的引用, 而不是對象本身。長的字符串和其它對象可以有多個相同的對象,可以使用賦值語句創(chuàng)建出新的對象。?
?
????在python中,每個對象都有存有指向該對象的引用總數(shù),即引用計數(shù)。通過sys包中的getrefcount()方法可以查看某個對象的引用計數(shù)。需要注意的是當(dāng)使用某個引用作為參數(shù),傳遞給getrefcount()時,參數(shù)實際上創(chuàng)建了一個臨時的引用。因此,getrefcount()所得到的結(jié)果,會比期望的多1。
from sys import getrefcounta = [1, 2, 3] print(getrefcount(a)) # 2b = a print(getrefcount(b)) #3?
(2)對象引用對象?
????python的一個容器對象,比如列表、詞典等,可以包含多個對象。實際上,容器對象中包含的并不是元素對象本身,是指向各個元素對象的引用。?
也可以自己定義一個對象,中間引用其他的對象:
?
(3)引用減少?
????某個對象的引用計數(shù)可能減少,比如,可以使用del關(guān)鍵字刪除某個引用:
?
del也可以用于刪除容器中的元素,比如:
a = [1,2,3]del a[0]print(a) #刪除a[0]引用,則a[0]指向的對象可能會被釋放(如果沒有其他引用指向它的話)?
如果某個引用指向?qū)ο驛,當(dāng)這個引用被重新定向到某個其他對象B時,對象A的引用計數(shù)減少:
from sys import getrefcounta = [1, 2, 3]b = aprint(getrefcount(b))a = 1print(getrefcount(b))?
(4)垃圾回收?
????python的內(nèi)存自動回收機(jī)制使得程序不需要自己釋放內(nèi)存。
2、python內(nèi)置函數(shù)?
????python內(nèi)置函數(shù)隨著python解釋器的運行而創(chuàng)建。在python程序中,你可以隨時調(diào)用這些函數(shù),不需要定義。常見的內(nèi)置函數(shù)如下:
?
分類總結(jié):
數(shù)學(xué)運算abs(-5) # 取絕對值,也就是5round(2.6) # 四舍五入取整,也就是3.0pow(2, 3) # 相當(dāng)于2**3,如果是pow(2, 3, 5),相當(dāng)于2**3 % 5cmp(2.3, 3.2) # 比較兩個數(shù)的大小divmod(9,2) # 返回除法結(jié)果和余數(shù)max([1,5,2,9]) # 求最大值min([9,2,-4,2]) # 求最小值sum([2,-1,9,12]) # 求和類型轉(zhuǎn)換int("5") # 轉(zhuǎn)換為整數(shù) integerfloat(2) # 轉(zhuǎn)換為浮點數(shù) floatlong("23") # 轉(zhuǎn)換為長整數(shù) long integerstr(2.3) # 轉(zhuǎn)換為字符串 stringcomplex(3, 9) # 返回復(fù)數(shù) 3 + 9iord("A") # "A"字符對應(yīng)的數(shù)值chr(65) # 數(shù)值65對應(yīng)的字符unichr(65) # 數(shù)值65對應(yīng)的unicode字符bool(0) # 轉(zhuǎn)換為相應(yīng)的真假值,在Python中,0相當(dāng)于Falsebin(56) # 返回一個字符串,表示56的二進(jìn)制數(shù)hex(56) # 返回一個字符串,表示56的十六進(jìn)制數(shù)oct(56) # 返回一個字符串,表示56的八進(jìn)制數(shù)list((1,2,3)) # 轉(zhuǎn)換為表 listtuple([2,3,4]) # 轉(zhuǎn)換為定值表 tupleslice(5,2,-1) # 構(gòu)建下標(biāo)對象 slicedict(a=1,b="hello",c=[1,2,3]) # 構(gòu)建詞典 dictionary**粗體文本**序列操作all([True, 1, "hello!"]) # 是否所有的元素都相當(dāng)于True值any(["", 0, False, [], None]) # 是否有任意一個元素相當(dāng)于True值sorted([1,5,3]) # 返回正序的序列,也就是[1,3,5]reversed([1,5,3]) # 返回反序的序列,也就是[3,5,1]類,對象,屬性# define classclass Me(object):def test(self):print "Hello!"def new_test():print "New Hello!"me = Me()hasattr(me, "test") # 檢查me對象是否有test屬性getattr(me, "test") # 返回test屬性setattr(me, "test", new_test) # 將test屬性設(shè)置為new_testdelattr(me, "test") # 刪除test屬性isinstance(me, Me) # me對象是否為Me類生成的對象 (一個instance)issubclass(Me, object) # Me類是否為object類的子類編譯,執(zhí)行repr(me) # 返回對象的字符串表達(dá)compile("print('Hello')",'test.py','exec') # 編譯字符串成為code對象eval("1 + 1") # 解釋字符串表達(dá)式。參數(shù)也可以是compile()返回的code對象exec("print('Hello')") # 解釋并執(zhí)行字符串,print('Hello')。參數(shù)也可以是compile()返回的code對象其他input("Please input:") # 等待輸入globals() # 返回全局命名空間,比如全局變量名,全局函數(shù)名locals() # 返回局部命名空間?
參考:
http://www.cnblogs.com/vamei/archive/2012/09/13/2682778.html
轉(zhuǎn)載于:https://www.cnblogs.com/gtarcoder/p/5028897.html
總結(jié)
以上是生活随笔為你收集整理的python语法笔记(五)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 晚上做梦梦到流鼻血是什么意思
- 下一篇: 【python】os.getcwd和ge