比如你定義了一個(gè)函數(shù)fun()

成都創(chuàng)新互聯(lián),為您提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)站營(yíng)銷(xiāo)推廣、網(wǎng)站開(kāi)發(fā)設(shè)計(jì),對(duì)服務(wù)成都木屋等多個(gè)行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗(yàn)。成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司成立于2013年,提供專(zhuān)業(yè)網(wǎng)站制作報(bào)價(jià)服務(wù),我們深知市場(chǎng)的競(jìng)爭(zhēng)激烈,認(rèn)真對(duì)待每位客戶(hù),為客戶(hù)提供賞心悅目的作品。 與客戶(hù)共同發(fā)展進(jìn)步,是我們永遠(yuǎn)的責(zé)任!
def?fun():
print("run24pro")
那么你在主程序入口可以像這樣調(diào)用
if?__name__=="__main__":
fun()
首先來(lái)看一個(gè)函數(shù)間的調(diào)用
類(lèi)方法:
執(zhí)行結(jié)果:
metaclass能有什么用處,先來(lái)個(gè)感性的認(rèn)識(shí):
1.1 在wiki上面,metaclass是這樣定義的:In object-oriented programming,
a metaclass is a class whose instances are classes.
Just as an ordinary class defines the behavior of certain objects,
a metaclass defines the behavior of certain classes and their instances.
也就是說(shuō)metaclass的實(shí)例化結(jié)果是類(lèi),而class實(shí)例化的結(jié)果是instance。我是這么理解的:
metaclass是類(lèi)似創(chuàng)建類(lèi)的模板,所有的類(lèi)都是通過(guò)他來(lái)create的(調(diào)用 new ),這使得你可以自由的控制
創(chuàng)建類(lèi)的那個(gè)過(guò)程,實(shí)現(xiàn)你所需要的功能。
當(dāng)然你也可以用函數(shù)的方式(下文會(huì)講)
4.1 用類(lèi)的形式
4.1.1 類(lèi)繼承于type, 例如: class Meta(type):pass
4.1.2 將需要使用metaclass來(lái)構(gòu)建class的類(lèi)的 metaclass 屬性(不需要顯示聲明,直接有的了)賦值為Meta(繼承于type的類(lèi))
4.2 用函數(shù)的形式
4.2.1 構(gòu)建一個(gè)函數(shù),例如叫metaclass_new, 需要3個(gè)參數(shù):name, bases, attrs,
name: 類(lèi)的名字
bases: 基類(lèi),通常是tuple類(lèi)型
attrs: dict類(lèi)型,就是類(lèi)的屬性或者函數(shù)
4.2.2 將需要使用metaclass來(lái)構(gòu)建class的類(lèi)的 metaclass 屬性(不需要顯示聲明,直接有的了)賦值為函數(shù)metaclas_new
5.1 basic
metaclass的原理其實(shí)是這樣的:當(dāng)定義好類(lèi)之后,創(chuàng)建類(lèi)的時(shí)候其實(shí)是調(diào)用了type的 new 方法為這個(gè)類(lèi)分配內(nèi)存空間,創(chuàng)建
好了之后再調(diào)用type的 init 方法初始化(做一些賦值等)。所以metaclass的所有magic其實(shí)就在于這個(gè) new 方法里面了。
說(shuō)說(shuō)這個(gè)方法: new (cls, name, bases, attrs)
cls: 將要?jiǎng)?chuàng)建的類(lèi),類(lèi)似與self,但是self指向的是instance,而這里cls指向的是class
name: 類(lèi)的名字,也就是我們通常用類(lèi)名. name 獲取的。
bases: 基類(lèi)
attrs: 屬性的dict。dict的內(nèi)容可以是變量(類(lèi)屬性),也可以是函數(shù)(類(lèi)方法)。
所以在創(chuàng)建類(lèi)的過(guò)程,我們可以在這個(gè)函數(shù)里面修改name,bases,attrs的值來(lái)自由的達(dá)到我們的功能。這里常用的配合方法是
getattr和setattr(just an advice)
下面實(shí)現(xiàn)python中在一個(gè)類(lèi)中調(diào)用另一個(gè)類(lèi)的函數(shù)方法
或者下面來(lái)一個(gè)號(hào)理解的例子
執(zhí)行結(jié)果:
先來(lái)介紹內(nèi)部類(lèi)與外部類(lèi)是什么?
看源碼解析:
內(nèi)部類(lèi)調(diào)用外部類(lèi)的類(lèi)屬性和類(lèi)方法
參考文獻(xiàn)1
參考文獻(xiàn)2
參考文獻(xiàn)3
inname = r"C:\Python27\esri.shp"
outname = "outname.cst"
# 在此處調(diào)用該函數(shù)。函數(shù)體定義必須放在調(diào)用以前。可以通過(guò)import
read_ESRT_……(file = inname, fileOut = outname)
# 這兩個(gè)參數(shù)只是字符串而已,指明你的文件路徑。注意在python中,若有 \ 號(hào),則最好使用 \\ 雙斜杠,或者如上例,加上前綴 r
1:
簡(jiǎn)單的函數(shù)演示:
這個(gè)enumerate 函數(shù)挺有意思,用一次就愛(ài)不釋手,可以自己去敲敲代碼感受一下。
2:上面僅僅是簡(jiǎn)單的一個(gè)展示已經(jīng)存在的書(shū)籍名稱(chēng),加入我新增了一本書(shū),新增完成之后,我需要再show一下目前我有那些書(shū)呢?
如果沒(méi)有函數(shù)之前,我們肯定需要再次執(zhí)行一遍所有有關(guān)print的代碼,但是函數(shù)的功能就是讓我們減少重復(fù)冗余的代碼,只要再次調(diào)用show_book()即可。
再舉一個(gè)簡(jiǎn)單的例子,在一個(gè)函數(shù)內(nèi)調(diào)用另外一個(gè)函數(shù),并傳遞參數(shù)
這里來(lái)給大家演示一下,函數(shù)的定義或構(gòu)造,并調(diào)用函數(shù)來(lái)實(shí)現(xiàn)封裝后的效果。
首先我們來(lái)看看想實(shí)現(xiàn)下面的這個(gè)效果,如果不使用函數(shù)應(yīng)該怎么實(shí)現(xiàn)。
以上兩種返回結(jié)果都是1-9這幾個(gè)數(shù)字。
以上兩種方法,第一種代碼重復(fù)率太高,代碼美觀效果太差,雖然能實(shí)現(xiàn)效果,但是因?yàn)閿?shù)量比較少,還能手工打出來(lái)這幾行代碼,如果是打印1-100000就很難實(shí)現(xiàn)了。這時(shí)候for循環(huán)還是可以實(shí)現(xiàn)的,但是for循環(huán)只能實(shí)現(xiàn)類(lèi)似的數(shù)字和變量循環(huán),無(wú)法進(jìn)行復(fù)雜的功能開(kāi)發(fā)。鑒于此,函數(shù)這個(gè)概念就被python引入了,下面先來(lái)看看函數(shù)是怎么實(shí)現(xiàn)上面的效果的,還是兩種方法。
這時(shí)候如果想實(shí)現(xiàn)上面的打印結(jié)果就直接使用函數(shù)名+小括號(hào)調(diào)用函數(shù)就可以了,這種類(lèi)型的語(yǔ)法,不僅可以反復(fù)使用,而且封裝后的代碼更美觀。
分析如下:
首先調(diào)用deco函數(shù),打印三條語(yǔ)句,就是前三條
因?yàn)閐eco函數(shù)有返回值,返回的是你傳遞的參數(shù),也就是myfunc的引用。
第10行的myfunc為你deco函數(shù)的返回值,也就是myfunc
第11行調(diào)用的myfunc(),其實(shí)調(diào)用的是deco返回值的函數(shù),也就是你傳遞的函數(shù)的引用。
如有不明白的地方,請(qǐng)繼續(xù)追問(wèn)!
當(dāng)前題目:python函數(shù)調(diào)用軌跡,python運(yùn)動(dòng)軌跡
文章地址:http://chinadenli.net/article34/hsgope.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站收錄、建站公司、網(wǎng)站改版、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)