您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)Python中怎么定義函數(shù)并實(shí)現(xiàn)傳參,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
一、函數(shù)初識(shí)
1、定義:將一組語(yǔ)句的集合通過(guò)一個(gè)名字(函數(shù)名)封裝起來(lái),要想執(zhí)行這個(gè)函數(shù),只需調(diào)用其函數(shù)名即可。
2、好處:代碼重用;保持一致性;可擴(kuò)展性。
3、示例如下:
# -*-coding:utf-8-*- def sayHello(): print('Hello world!') sayHello()
二、函數(shù)傳參方式
如上面的實(shí)例是函數(shù)中最基礎(chǔ)的一種,是不傳參數(shù)的,說(shuō)到這里,我們有必要了解一下何為函數(shù)參數(shù):
1、函數(shù)參數(shù):
形參變量: 只有在被調(diào)用時(shí)才分配內(nèi)存單元,調(diào)用結(jié)束時(shí),即刻釋放所分配的內(nèi)存單元。因此,形參只在函數(shù)內(nèi)部有效。
函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后不能再使用該形參變量
實(shí)參:可以是常量,變量,表達(dá)式,函數(shù)等,無(wú)論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用,它們都必須有確定的值,以便把這些值傳送給形參。因此應(yīng)預(yù)先用賦值,輸入等辦法使參數(shù)獲得確定值。
2、函數(shù)傳參的分類
<1> 位置參數(shù)
位置參數(shù)顧名思義,就是調(diào)用函數(shù)時(shí)傳的實(shí)參與函數(shù)的形參位置上一一對(duì)應(yīng)的參數(shù)。
如下實(shí)例:
#位置參數(shù) print('\n以下是位置參數(shù)傳值\n') def stu_info(name,age,major,country): print('--------學(xué)生信息-------') print('姓名:',name) print('年齡:',age) print('專業(yè):',major) print('國(guó)籍:',country) stu1 = stu_info('Jack',21,'Chinese','CN') # 實(shí)參依次與函數(shù)中的name,age,major,country對(duì)應(yīng) stu2 = stu_info('Frank',20,'JP','UN') stu3 = stu_info('Rose',19,'Art','UK')
<2> 默認(rèn)參數(shù)
默認(rèn)參數(shù)就有點(diǎn)不同了,是你在函數(shù)形參中定義好的,當(dāng)實(shí)參中未傳對(duì)應(yīng)的參數(shù)時(shí),它就派上用場(chǎng)了,默認(rèn)給你加上。是不是有點(diǎn)貼心呢?
注意:默認(rèn)參數(shù),必須放在位置參數(shù)之后,否則會(huì)出錯(cuò)
實(shí)例如下:
#默認(rèn)參數(shù) print('\n以下是默認(rèn)參數(shù)傳值\n') def stu_info(name,age,major,country = 'CN'):# country設(shè)為了默認(rèn)參數(shù),必須放在位置參數(shù)之后,否則會(huì)出錯(cuò) print('--------學(xué)生信息-------') print('姓名:',name) print('年齡:',age) print('專業(yè):',major) print('國(guó)籍:',country) stu1 = stu_info('Jack',21,'Chinese') # 此處未傳對(duì)應(yīng)的值,但形參中已經(jīng)定義了,所以不用擔(dān)心找不家了! stu2 = stu_info('Frank',20,'JP') # 你也是的 stu3 = stu_info('Rose',19,'Art','UK') # 既然你已經(jīng)傳參了,就隨你了。
<3> 關(guān)鍵參數(shù)
正常情況下,給函數(shù)傳參數(shù)要按順序,不想按順序就可以用關(guān)鍵參數(shù),只需指定參數(shù)名即可(指定參數(shù)名的參數(shù)就叫關(guān)鍵參數(shù)),但記住一個(gè)要求就是,關(guān)鍵參數(shù)必須放在位置參數(shù)(以位置順序確定對(duì)應(yīng)關(guān)系的參數(shù))之后。
還是奉上實(shí)例:
#關(guān)鍵參數(shù),不能重復(fù)賦值,且指定的參數(shù)應(yīng)在位置參數(shù)之后 print('\n以下是關(guān)鍵參數(shù)傳值\n') def stu_info(name,age,major,country = 'CN'): # print('--------學(xué)生信息-------') print('姓名:',name) print('年齡:',age) print('專業(yè):',major) print('國(guó)籍:',country) stu1 = stu_info('Jack',21,'Chinese') stu2 = stu_info('Frank',20,major='JP') # major即為關(guān)鍵參數(shù),單獨(dú)指定,但必須放在位置參數(shù)之后 stu3 = stu_info('Rose',19,'Art',country='UK')
<4> 非固定傳參
這種傳參方式可就大有講究了,花樣可謂繁多,自然本領(lǐng)也就大多了,不信往下看。
可以細(xì)分為兩類:
非固定傳參方式一:
可同時(shí)指定多個(gè)用戶,傳過(guò)來(lái)的所有參數(shù)打包成元祖。如下:
#-*-coding:utf-8-*- #方式一 def send_alert(msg,*users): # '*users‘ 表示非固定傳參,可同時(shí)指定多個(gè)用戶,傳過(guò)來(lái)的所有參數(shù)打包元祖 for u in users: print('報(bào)警!請(qǐng)及時(shí)查看...',u,msg) send_alert('你的系統(tǒng)已瀕臨崩潰!','cc','hyt','yuq','dy') #方式二 def send_alert(msg,*users): # '*users‘ 表示非固定傳參,可同時(shí)指定多個(gè)用戶,傳過(guò)來(lái)的所有參數(shù)打包元祖 for u in users: print('報(bào)警!請(qǐng)及時(shí)查看...',u,msg) send_alert('你的系統(tǒng)已瀕臨崩潰!',*['cc','hyt','yuq','dy']) ''' 如果列表前不加 * 號(hào),整個(gè)列表就會(huì)被當(dāng)作元組里的一個(gè)元素, 加 * 號(hào)后就相當(dāng)于列表里每個(gè)元素都是元祖的一個(gè)元素了。就會(huì)向元組里的每個(gè)成員都發(fā)出訊息了。 ''' def send_alert(msg,*users,age): for u in users: print('報(bào)警!請(qǐng)及時(shí)查看...',u,msg) send_alert('你的系統(tǒng)已瀕臨崩潰!','sc','qh',age=22) ''' '*users‘此時(shí)會(huì)默認(rèn)獲取前一個(gè)位置參數(shù)之后所有的元素,若傳參時(shí)最后不指定關(guān)鍵參數(shù)就會(huì)報(bào)錯(cuò),age無(wú)法獲取傳值 '''
非固定傳參方式二:
可同時(shí)指定多個(gè)用戶,傳過(guò)來(lái)的所有參數(shù)打包成元組或字典。如下:
#-*-coding:utf-8-*- def func(name,*args,**kwargs): # 形參依次是位置參數(shù),元組,字典 print(name,args,kwargs) func('Hope',22,'CN','tomorrow') #輸出:Hope (22, 'CN', 'tomorrow') {} func('Try',21,'will',addr='HG',num=666) #輸出:Try (21, 'will') {'addr': 'HG', 'num': 666} dit = {'major':'Math','interest':'reading'} func('want',*['day','up'],**dit) #輸出:want ('day', 'up') {'major': 'Math', 'interest': 'reading'}
關(guān)于Python中怎么定義函數(shù)并實(shí)現(xiàn)傳參就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。