上一期我們學(xué)習(xí)參數(shù)傳遞怎么傳遞,也了解了參數(shù)的幾種類型。

創(chuàng)新互聯(lián)專業(yè)提供成都主機(jī)托管四川主機(jī)托管成都服務(wù)器托管四川服務(wù)器托管,支持按月付款!我們的承諾:貴族品質(zhì)、平民價(jià)格,機(jī)房位于中國電信/網(wǎng)通/移動(dòng)機(jī)房,珉田數(shù)據(jù)中心服務(wù)有保障!
首先,我們?cè)賮砘仡櫼幌拢螀⒑蛯?shí)參:
形參是在定義函數(shù)時(shí)定義的,放在函數(shù)名后面的圓括號(hào)里,可為空
實(shí)參是調(diào)用函數(shù)時(shí)為形參傳入具體的參數(shù)值
簡單總結(jié)一下,誰調(diào)用函數(shù),誰就負(fù)責(zé)傳入?yún)?shù)。
好吶,本期我們來詳細(xì)學(xué)習(xí)函數(shù)幾種參數(shù)類型,大綱如下:
python函數(shù)的參數(shù)名是無意義的,Python允許在調(diào)用函數(shù)時(shí)通過通過名字來傳入?yún)?shù)值。
位置參數(shù):按照形參位置傳入的參數(shù)
調(diào)用函數(shù)時(shí),實(shí)參默認(rèn)按位置順序傳遞的。同時(shí)實(shí)參個(gè)數(shù)也要和形參匹配
舉一個(gè)小栗子
如果實(shí)參的個(gè)數(shù)與形參不匹配時(shí),調(diào)用函數(shù)運(yùn)行就會(huì)報(bào)錯(cuò)
Python中,形參與調(diào)用函數(shù)緊密聯(lián)系在一起的。
關(guān)鍵字參數(shù):調(diào)用函數(shù)時(shí),使形參名稱來傳遞參數(shù),形式為“形參名=實(shí)參”
關(guān)鍵字參數(shù),又叫命名參數(shù),傳遞時(shí)無需考慮參數(shù)位置和順序
舉一個(gè)小栗子
默認(rèn)參數(shù):定義函數(shù)時(shí),我們可以為形參提前設(shè)置具體的值。
在定義函數(shù)時(shí),默認(rèn)參數(shù)要放到位置等其他參數(shù)后面
在調(diào)用函數(shù)時(shí),默認(rèn)參數(shù)是可選的。如果傳入新值,則會(huì)覆蓋默認(rèn)值
舉一個(gè)小栗子
注意,默認(rèn)值不能位于位置參數(shù)前面,否則程序會(huì)報(bào)錯(cuò)誤
不定長參數(shù)又名可變參數(shù)。
不定長參數(shù)指的是可變數(shù)量的參數(shù),分兩種情況:
如果不定長參數(shù)后面,可以新增參數(shù)嗎?
我們通過例子來看,會(huì)發(fā)生什么?
運(yùn)行上面的程序,Python解釋器會(huì)報(bào)錯(cuò)
原因是,形參a已經(jīng)是不定長參數(shù),我們調(diào)用的test(2,3,4)傳入的三個(gè)實(shí)參,系統(tǒng)自動(dòng)把它們屬于形參a的值,形參b 和形參c就等于沒有值傳入,這時(shí)候系統(tǒng)就認(rèn)為,調(diào)用函數(shù)的對(duì)象,參數(shù)沒有傳夠。
為了解決這一報(bào)錯(cuò),python引入了 強(qiáng)制命名參數(shù)
規(guī)定,調(diào)用不定參數(shù)后面有跟位置參數(shù)的函數(shù)時(shí),傳入給位置參數(shù)時(shí),必須要強(qiáng)制命名參進(jìn)行傳參。
逆向參數(shù)收集針對(duì)的對(duì)象傳入函數(shù)的實(shí)參
調(diào)用函數(shù)時(shí),如果實(shí)參是元組,列表或者字典,通過在實(shí)參前面加入星號(hào),可以自動(dòng)把元素進(jìn)行隔開,然后再轉(zhuǎn)入給函數(shù)進(jìn)行處理
舉一個(gè)小栗子
本期,我們?cè)敿?xì)學(xué)習(xí)了參數(shù)幾種類型,為后面我們學(xué)習(xí)函數(shù),打好基礎(chǔ)。
實(shí)踐是檢驗(yàn)真理的過程,大家多動(dòng)手練習(xí)練習(xí),會(huì)有不一樣的奇妙旅程~
好吶,以上是本期內(nèi)容,歡迎大佬們?cè)u(píng)論區(qū)指正~
Python 函數(shù)定義以及參數(shù)傳遞
1.函數(shù)定義
#形如def func(args...):
doSomething123
以關(guān)鍵字def 開頭,后面是函數(shù)名和參數(shù)下面是函數(shù)處理過程。
舉例:
def add( a, b ):
return a+b12
參數(shù)可以設(shè)定默認(rèn)值,如:
def add( a, b=10 ): #注意:默認(rèn)值參數(shù)只會(huì)運(yùn)算一次
return a+b12
默認(rèn)值參數(shù)只會(huì)運(yùn)算一次是什么意思?
def func( a, b=[] ): #b的默認(rèn)值指向一個(gè)空的列表,每次不帶默認(rèn)值都會(huì)指向這塊內(nèi)存
b.append(a) return b
print(func(1))#向默認(rèn)的空列表里加入元素1 ,默認(rèn)列表里已經(jīng)是[1]print(func(2))#向默認(rèn)的列表里加入元素2,默認(rèn)列表里已經(jīng)是[1,2]print(func(3,[]))#向b指向的空列表里加入元素1 ,默認(rèn)列表里還是[1,2]print(func(4))#向默認(rèn)的列表里加入元素4,默認(rèn)列表里已經(jīng)是[1,2,4]'''
結(jié)果:
[1]
[1, 2]
[3]
[1, 2, 4]
'''12345678910111213141516
這下明白為什么默認(rèn)參數(shù)只計(jì)算一次了吧,函數(shù)參數(shù)不傳遞時(shí)默認(rèn)值總是指向固定的內(nèi)存空間,就是第一次計(jì)算的空間。
2.參數(shù)傳遞
def func(a, b):
print('a=%d, b=%d' % (a,b) )12
在使用函數(shù)時(shí)可以如下方式,結(jié)果都是相同的
func(10,20) #不使用參數(shù)名,需要按參數(shù)順序傳遞func(a=10,b=20) #使用參數(shù)名可以不按順序傳遞func(b=20,a=10)#結(jié)果:a=10, b=20a=10, b=20a=10, b=201234567
如果函數(shù)定義形式如下方式:
def func(*args): #這種定義會(huì)把傳遞的參數(shù)包成元組
print(args,type(args))
func(10,20)#結(jié)果:#(10, 20) class 'tuple'1234567
舉一個(gè)和上述過程相反的例子:
def func(a,b):
print('a=%d, b=%d' % (a,b) )
a = (10, 20)
func(*a) #在調(diào)用函數(shù)使用`*`則會(huì)把元組解包成單個(gè)變量按順序傳入函數(shù)#結(jié)果:a=10, b=20123456
總結(jié):*號(hào)在定義函數(shù)參數(shù)時(shí),傳入函數(shù)的參數(shù)會(huì)轉(zhuǎn)換成元組,如果 *號(hào)在調(diào)用時(shí)則會(huì)把元組解包成單個(gè)元素。
另一種定義:
def func(**kw):#使用**定義參數(shù)會(huì)把傳入?yún)?shù)包裝成字典dict
print(kw, type(kw) )
func(a=10,b=20)#這種函數(shù)在使用時(shí)必須指定參數(shù)值,使用key=value這種形式#結(jié)果:{'b': 20, 'a': 10} class 'dict'12345
相反的例子:
def func(a,b):
print('a=%d, b=%d' % (a,b) )
d = {'a':10, 'b':20 }
func(**d) #在調(diào)用時(shí)使用**會(huì)把字典解包成變量傳入函數(shù)。12345
def func(*args, **kw):#這種形式的定義代表可以接受任意類型的參數(shù)
print(args,kw )12
總結(jié):**號(hào)在定義函數(shù)參數(shù)時(shí),傳入函數(shù)的參數(shù)會(huì)轉(zhuǎn)換成字典,如果 **號(hào)在調(diào)用時(shí)則會(huì)把字典解包成單個(gè)元素。
lambda表達(dá)式
lambda表達(dá)式就是一種簡單的函數(shù)
形如 f = lambda 參數(shù)1,參數(shù)2: 返回的計(jì)算值
例如:
add = lambda x,y: x+y
print(add(1,2))'''
結(jié)果:3
'''12345
python中eval函數(shù)作用如下:
1、計(jì)算字符串中有效的表達(dá)式,并返回結(jié)果。
2、將字符串轉(zhuǎn)成相應(yīng)的對(duì)象(如list、tuple、dict和string之間的轉(zhuǎn)換)。
3、將利用反引號(hào)轉(zhuǎn)換的字符串再反轉(zhuǎn)回對(duì)象。
函數(shù)作用域:eval()函數(shù)并不會(huì)創(chuàng)建一個(gè)新的作用域,并且它的作用域就是它所在的作用域,有時(shí)候需要將eval()函數(shù)的作用域設(shè)置為全局,當(dāng)然可以將eval()在全局作用域中使用,這個(gè)時(shí)候可以用window.eval()的方式實(shí)現(xiàn)。
參數(shù)情況:
(1)如果參數(shù)是一個(gè)表達(dá)式,eval() 函數(shù)將執(zhí)行表達(dá)式。
(2)如果參數(shù)是Javascript語句,eval()將執(zhí)行 Javascript 語句。
注意:如果執(zhí)行結(jié)果是一個(gè)值就返回,不是就返回undefined,如果參數(shù)不是一個(gè)字符串,則直接返回該參數(shù)。
python中的函數(shù),大多需要配置參數(shù),以下是幾種函數(shù)的參數(shù)類型:
1.必備參數(shù):以正確的順序、個(gè)數(shù)傳入函數(shù)。調(diào)用時(shí)的參數(shù)情況要和聲明時(shí)一樣。最常用的情況。
def tplink(a,b):
c=a+b+b
return c?
tplink(4,2)
2.關(guān)鍵字參數(shù):使用關(guān)鍵字參數(shù)允許函數(shù)調(diào)用時(shí)參數(shù)的順序和聲明時(shí)不一致,因?yàn)閜ython解析器會(huì)在調(diào)用函數(shù)時(shí),用參數(shù)名匹配參數(shù)值。
def tplink(age1,age2):
ageall=age1+age2+age2
return ageall
tplink(age2=4,age1=2)
3.默認(rèn)參數(shù):默認(rèn)某個(gè)參數(shù)的取值
def tplink(age1,age2=5):
ageall=age1+age2+age2
return ageall
tplink(age1=4)
4.不定長參數(shù):在聲明時(shí)并不確定 調(diào)用時(shí)的參數(shù)數(shù)量。這種情況,可以用不定長參數(shù)進(jìn)行解決,具體操作是在參數(shù)名前用*。
但不能和 關(guān)鍵字參數(shù)并用。一般在正常參數(shù)arg之后。
*args、**kwargs的定義:
這兩個(gè)都是python中的不定長參數(shù),又稱為可變參數(shù)。
*args 表示任何多個(gè)無名參數(shù),它是一個(gè) tuple ;
**kwargs 表示關(guān)鍵字參數(shù),它是一個(gè)dict。
同時(shí)使用 * args和 ** kwargs 時(shí),必須 * args參數(shù)列要在 ** kwargs前。且都在arg之后。
函數(shù)在調(diào)用時(shí),會(huì)根據(jù)順序,看是否放進(jìn) *args 或者 **kwargs中。
具體可根據(jù)實(shí)際情況使用,可以 更方便靈活的接收信息。
分享標(biāo)題:python函數(shù)參數(shù)作用,python中函數(shù)可以作為函數(shù)參數(shù)嗎
分享地址:http://chinadenli.net/article1/dseiiid.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、面包屑導(dǎo)航、域名注冊(cè)、網(wǎng)站收錄、品牌網(wǎng)站建設(shè)、微信公眾號(hào)
聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)