函數(shù)是組織好,可重復(fù)使用的,用來(lái)實(shí)現(xiàn)相關(guān)功能的代碼段
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),凌源企業(yè)網(wǎng)站建設(shè),凌源品牌網(wǎng)站建設(shè),網(wǎng)站定制,凌源網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,凌源網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
函數(shù)提高了代碼的重復(fù)利用率和應(yīng)用的模塊性。
除Python自帶的函數(shù)之外,也可以自己創(chuàng)建函數(shù),叫做自定義函數(shù)
語(yǔ)法:
函數(shù)代碼塊以 def 開頭
參數(shù)為 輸入值 ,放于函數(shù)名后口號(hào)里面,
函數(shù)內(nèi)容以冒號(hào):開始,函數(shù)體縮進(jìn), return 返回 輸出值
函數(shù)調(diào)用使用關(guān)鍵字參數(shù)來(lái)確定傳入的參數(shù)值,此時(shí),如果多個(gè)函數(shù)則不需要按照指定順序。
在定義函數(shù)時(shí),指定參數(shù)默認(rèn)值。調(diào)用時(shí)如果不傳入?yún)?shù),則使用默認(rèn)值
不定長(zhǎng)部分如果沒有指定參數(shù),傳入是一個(gè)空元組
加了 兩個(gè)星號(hào) ** 的參數(shù)會(huì)以字典的形式導(dǎo)入
/ 用來(lái)指明函數(shù)形參必須使用指定位置參數(shù),不能使用關(guān)鍵字參數(shù)的形式。
3.8版本之后的才能使用
不使用 def 定義函數(shù),沒有函數(shù)名
lamdba主體時(shí)一個(gè)表達(dá)式,而不是代碼塊,函數(shù)體比def簡(jiǎn)單很多
定義在函數(shù)內(nèi)部的為局部變量,僅能在函數(shù)內(nèi)部使用
定義在函數(shù)外部的為全局變量,可在全局使用
模塊是將包含所有定義的函數(shù)和變量的文件,一般將同類功能的函數(shù)組和在一起稱為模塊。
模塊需要導(dǎo)入后,在調(diào)用相應(yīng)函數(shù)進(jìn)行使用
模塊導(dǎo)入的方法:
從模塊中導(dǎo)入一個(gè)指定的部分
把一個(gè)模塊的所有內(nèi)容全都導(dǎo)入
定義一個(gè)函數(shù)
你可以定義一個(gè)由自己想要功能的函數(shù),以下是簡(jiǎn)單的規(guī)則:
函數(shù)代碼塊以 def 關(guān)鍵詞開頭,后接函數(shù)標(biāo)識(shí)符名稱和圓括號(hào) ()。
任何傳入?yún)?shù)和自變量必須放在圓括號(hào)中間,圓括號(hào)之間可以用于定義參數(shù)。
函數(shù)的第一行語(yǔ)句可以選擇性地使用文檔字符串—用于存放函數(shù)說(shuō)明。
函數(shù)內(nèi)容以冒號(hào) : 起始,并且縮進(jìn)。
return [表達(dá)式] 結(jié)束函數(shù),選擇性地返回一個(gè)值給調(diào)用方,不帶表達(dá)式的 return 相當(dāng)于返回 None。
import inspect
from demo import demo
#傳入函數(shù),改變函數(shù)內(nèi)部變量a,從a=1改變成a=2
def cfunc(func):
#當(dāng)前位置的全部局部變量
lc=locals()
#獲得函數(shù)的內(nèi)容
func_code=inspect.getsource(func)
#使用replace改變函數(shù)內(nèi)部的變量
func_code=func_code.replace('a=1','a=2')
#動(dòng)態(tài)創(chuàng)建函數(shù)
exec(func_code)
#獲得函數(shù)并返回
res_func=lc[func.__name__]
return res_func
demo=cfunc(demo)
demo()
定義一個(gè)A類,然后實(shí)例化一個(gè)A對(duì)象,通過(guò)setattr函數(shù)來(lái)給當(dāng)前類添加一個(gè)變量,值是test函數(shù)。調(diào)用haha函數(shù),就相當(dāng)于調(diào)用了test函數(shù)。 例2,定義一個(gè)模塊,通過(guò)另一個(gè)模塊函數(shù)調(diào)用函數(shù)來(lái)增加變量,值是test2函數(shù)。調(diào)用haha函數(shù),就相當(dāng)于調(diào)用了test2函數(shù)。
原理
python系統(tǒng)會(huì)維護(hù)一個(gè)變量的字典,可以通過(guò)locals()或者globals()獲取到該字典。由于字典是可變對(duì)象,那么,就可以動(dòng)態(tài)的增加變量。由于函數(shù)也是一個(gè)對(duì)象,那么就可以將變量指向函數(shù)。這樣就可以達(dá)到動(dòng)態(tài)修改函數(shù)名的目的了。
首先要理解什么是動(dòng)態(tài)語(yǔ)言:通俗地說(shuō):能夠在運(yùn)行時(shí)修改自身程序結(jié)構(gòu)的語(yǔ)言,就屬于動(dòng)態(tài)語(yǔ)言。那怎樣才算是“運(yùn)行時(shí)修改自身程序結(jié)構(gòu)”捏?比如下面這幾個(gè)例子都 算:在運(yùn)行時(shí)給某個(gè)類增加成員函數(shù)及成員變量;在運(yùn)行時(shí)改變某個(gè)類的父類;在運(yùn)行時(shí)創(chuàng)建出某個(gè)函數(shù).。
Python是可以實(shí)現(xiàn)動(dòng)態(tài)類的創(chuàng)建類(在任意代碼位置,符合正確的書寫格式),或者給類增加刪除屬性。因?yàn)轭愐彩菍?duì)象,你可以在運(yùn)行時(shí)動(dòng)態(tài)的創(chuàng)建它們,就像其他任何對(duì)象一樣。首先,你可以在函數(shù)中創(chuàng)建類,使用class關(guān)鍵字即可。
例子:
def?choose_class(name):
if?name?==?'foo':
class?Foo(object):
pass
return?Foo?????#?返回的是類,不是類的實(shí)例
else:
class?Bar(object):
pass
return?Bar
#排版有問(wèn)題?不好意思
#如果你覺得還不夠動(dòng)態(tài),因?yàn)槟闳匀恍枰约壕帉懻麄€(gè)類的代碼。由于類也是對(duì)象,
#所以它們必須是通過(guò)什么東西來(lái)生成的才對(duì)。當(dāng)你使用class關(guān)鍵字時(shí),Python解釋器自動(dòng)創(chuàng)建這
#個(gè)對(duì)象。但就和Python中的大多數(shù)事情一樣,Python仍然提供給你手動(dòng)處理的方法。內(nèi)建函數(shù)中有
#一個(gè)名叫type的內(nèi)建函數(shù),這個(gè)內(nèi)建函數(shù)古老但強(qiáng)大的函數(shù),?它能夠讓你知道一個(gè)對(duì)象的類型是
#什么,就像這樣:
MyShinyClass?=?type('MyShinyClass',?(),?{})??#?返回一個(gè)類對(duì)象
print?MyShinyClassclass?'__main__.MyShinyClass'
print?MyShinyClass()??#??創(chuàng)建一個(gè)該類的實(shí)例
__main__.MyShinyClass?object?at?0x8997cec另附type使用方法:
#type(類名,?父類的元組(針對(duì)繼承的情況,可以為空),包含屬性的字典(名稱和值))
params
就是(5, 5)
(5,) * 2 ,就是2個(gè)5的元組,乘號(hào)可以理解成相加。"*" * 30就是30個(gè)“*"的字符串
*params作為參數(shù),前面的*號(hào)就是把params元組分解成元素的意思,這樣就分開成為2個(gè)參數(shù)了。實(shí)際上傳遞給了x,y
于是就執(zhí)行了power(5,5)
名稱欄目:python動(dòng)態(tài)創(chuàng)建函數(shù),python自建函數(shù)
新聞來(lái)源:http://vcdvsql.cn/article46/heojeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、、云服務(wù)器、企業(yè)網(wǎng)站制作、網(wǎng)站內(nèi)鏈、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(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)