真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python對象函數(shù) python對象的屬性和方法

python函數(shù)是對象嗎

python中,所有的元素都是對象,其中第一類對象的通用特性:可作為值傳遞,賦值給另一個對象;可以作為元素添加到集合對象中;可以作為參數(shù)傳遞給其他函數(shù);可以作為函數(shù)的返回值

創(chuàng)新互聯(lián)建站制作網(wǎng)站網(wǎng)頁找三站合一網(wǎng)站制作公司,專注于網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計制作、成都網(wǎng)站建設(shè),網(wǎng)站設(shè)計,企業(yè)網(wǎng)站搭建,網(wǎng)站開發(fā),建網(wǎng)站業(yè)務(wù),680元做網(wǎng)站,已為千余家服務(wù),創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)將一如既往的為我們的客戶提供最優(yōu)質(zhì)的網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷推廣服務(wù)!

python函數(shù)傳對象對性能的影響

python函數(shù)傳對象對性能有影響。在Python中,一切皆對象,Python參數(shù)傳遞采用的都是“傳對象引用”的方式。實際上,這種方式相當(dāng)于傳值和傳引用的一種綜合。如果函數(shù)收到的是一個可變對象(比如字典或者列表)的引用,就能修改對象的原始值,相當(dāng)于通過“傳引用”來傳遞對象。如果函數(shù)收到的是一個不可變對象(比如數(shù)字、字符或者元組)的引用,就不能直接修改原始對象,相當(dāng)于通過“傳值’來傳遞對象,此時如果想改變這些變量的值,可以將這些變量申明為全局變量。

Python對象

眾所周知,Python是一門面向?qū)ο蟮恼Z言,在Python無論是數(shù)值、字符串、函數(shù)亦或是類型、類,都是對象。

對象是在 堆 上分配的結(jié)構(gòu),我們定義的所有變量、函數(shù)等,都存儲于堆內(nèi)存,而變量名、函數(shù)名則是一個存儲于 棧 中、指向堆中具體結(jié)構(gòu)的引用。

要想深入學(xué)習(xí)Python,首先需要知道Python對象的定義。

我們通常說的Python都是指CPython,底層由C語言實現(xiàn),源碼地址: cpython [GitHub]

Python對象的定義位于 Include/object.h ,是一個名為 PyObject 的結(jié)構(gòu)體:

Python中的所有對象都繼承自PyObejct,PyObject包含一個用于垃圾回收的雙向鏈表,一個引用計數(shù)變量 ob_refcnt 和 一個類型對象指針 ob_type

從PyObejct的注釋中,我們可以看到這樣一句:每個指向 可變大小Python對象 的指針也可以轉(zhuǎn)換為 PyVarObject* (可變大小的Python對象會在下文中解釋)。 PyVarObejct 就是在PyObject的基礎(chǔ)上多了一個 ob_size 字段,用于存儲元素個數(shù):

在PyObject結(jié)構(gòu)中,還有一個類型對象指針 ob_type ,用于表示Python對象是什么類型,定義Python對象類型的是一個 PyTypeObject 接口體

實際定義是位于 Include/cpython/object.h 的 _typeobject :

在這個類型對象中,不僅包含了對象的類型,還包含了如分配內(nèi)存大小、對象標(biāo)準(zhǔn)操作等信息,主要分為:

以Python中的 int類型 為例,int類型對象的定義如下:

從PyObject的定義中我們知道,每個對象的 ob_type 都要指向一個具體的類型對象,比如一個數(shù)值型對象 100 ,它的ob_type會指向 int類型對象PyLong_Type 。

PyTypeObject結(jié)構(gòu)體第一行是一個PyObject_VAR_HEAD宏,查看宏定義可知PyTypeObject是一個變長對象

也就是說,歸根結(jié)底 類型對象也是一個對象 ,也有ob_type屬性,那 PyLong_Type 的 ob_type 是什么呢?

回到PyLong_Type的定義,第一行 PyVarObject_HEAD_INIT(PyType_Type, 0) ,查看對應(yīng)的宏定義

由以上關(guān)系可以知道, PyVarObject_HEAD_INIT(PyType_Type, 0) = { { _PyObject_EXTRA_INIT 1, PyType_Type } 0} ,將其代入 PyObject_VAR_HEAD ,得到一個變長對象:

這樣看就很明確了,PyLong_Type的類型就是PyType_Typ,同理可知, Python類型對象的類型就是PyType_Type ,而 PyType_Type對象的類型是它本身

從上述內(nèi)容中,我們知道了對象和對象類型的定義,那么根據(jù)定義,對象可以有以下兩種分類

Python對象定義有 PyObject 和 PyVarObject ,因此,根據(jù)對象大小是否可變的區(qū)別,Python對象可以劃分為 可變對象(變長對象) 和 不可變對象(定長對象)

原本的對象a大小并沒有改變,只是s引用的對象改變了。這里的對象a、對象b就是定長對象

可以看到,變量l仍然指向?qū)ο骯,只是對象a的內(nèi)容發(fā)生了改變,數(shù)據(jù)量變大了。這里的對象a就是變長對象

由于存在以上特性,所以使用這兩種對象還會帶來一種區(qū)別:

聲明 s2 = s ,修改s的值: s = 'new string' ,s2的值不會一起改變,因為只是s指向了一個新的對象,s2指向的舊對象的值并沒有發(fā)生改變

聲明 l2 = l ,修改l的值: l.append(6) ,此時l2的值會一起改變,因為l和l2指向的是同一個對象,而該對象的內(nèi)容被l修改了

此外,對于 字符串 對象,Python還有一套內(nèi)存復(fù)用機制,如果兩個字符串變量值相同,那它們將共用同一個對象:

對于 數(shù)值型 對象,Python會默認(rèn)創(chuàng)建0~2 8 以內(nèi)的整數(shù)對象,也就是 0 ~ 256 之間的數(shù)值對象是共用的:

按照Python數(shù)據(jù)類型,對象可分為以下幾類:

Python創(chuàng)建對象有兩種方式,泛型API和和類型相關(guān)的API

這類API通常以 PyObject_xxx 的形式命名,可以應(yīng)用在任意Python對象上,如:

使用 PyObjecg_New 創(chuàng)建一個數(shù)值型對象:

這類API通常只能作用于一種類型的對象上,如:

使用 PyLong_FromLong 創(chuàng)建一個數(shù)值型對象:

在我們使用Python聲明變量的時候,并不需要為變量指派類型,在給變量賦值的時候,可以賦值任意類型數(shù)據(jù),如:

從Python對象的定義我們已經(jīng)可以知曉造成這個特點的原因了,Python創(chuàng)建對象時,會分配內(nèi)存進(jìn)行初始化,然后Python內(nèi)部通過 PyObject* 變量來維護(hù)這個對象,所以在Python內(nèi)部各函數(shù)直接傳遞的都是一種泛型指針 PyObject* ,這個指針?biāo)赶虻膶ο箢愋褪遣还潭ǖ模荒芡ㄟ^所指對象的 ob_type 屬性動態(tài)進(jìn)行判斷,而Python正是通過 ob_type 實現(xiàn)了多態(tài)機制

Python在管理維護(hù)對象時,通過引用計數(shù)來判斷內(nèi)存中的對象是否需要被銷毀,Python中所有事物都是對象,所有對象都有引用計數(shù) ob_refcnt 。

當(dāng)一個對象的引用計數(shù)減少到0之后,Python將會釋放該對象所占用的內(nèi)存和系統(tǒng)資源。

但這并不意味著最終一定會釋放內(nèi)存空間,因為頻繁申請釋放內(nèi)存會大大降低Python的執(zhí)行效率,因此Python中采用了內(nèi)存對象池的技術(shù),是的對象釋放的空間會還給內(nèi)存池,而不是直接釋放,后續(xù)需要申請空間時,優(yōu)先從內(nèi)存對象池中獲取。

python面向?qū)ο蟮娜筇卣鞯挠梅ê秃瘮?shù)的用法一樣嗎

python面向?qū)ο蟮娜筇卣鞯挠梅ê秃瘮?shù)的用法一樣。面向?qū)ο蟮娜筇匦允侵阜庋b、繼承和多態(tài)。面向?qū)ο缶幊淌且环N編程方式,此編程方式的落地需要使用類和對象來實現(xiàn),所以,面向?qū)ο缶幊唐鋵嵕褪菍︻惡蛯ο蟮氖褂谩n惥褪且粋€模板,模板里可以包含多個函數(shù),函數(shù)里實現(xiàn)一些功能對象則是根據(jù)模板創(chuàng)建的實例,通過實例對象可以執(zhí)行類中的函數(shù)。


本文標(biāo)題:python對象函數(shù) python對象的屬性和方法
網(wǎng)頁地址:http://weahome.cn/article/dopeshg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部