1、自定義函數(shù)(重點)
用法:def 函數(shù)名(參數(shù)1,參數(shù)2,參數(shù)3):
函數(shù)體
return 語句
例子:
(1)def greet(name):
(2) print(name+‘你好’)
(3) return
(4)greet('小明')
解示:第(1)行代碼定義了一個叫g(shù)reet的函數(shù),并且有一個參數(shù)name;進行傳遞;第(2)行代碼是實現(xiàn)了該函數(shù)的功能,也就是打印出語句
第(3)行代碼返回了函數(shù)的值;第(4)行代碼調(diào)用了函數(shù),并有一個參數(shù)進行傳遞
***注意
(1)函數(shù)的使用是必須是先定義,后調(diào)用,如第(4)行代碼;
(2)函數(shù)的參數(shù)問題,若函數(shù)定義時帶有參數(shù),而調(diào)用函數(shù)時沒有帶上參數(shù),則會報錯;例如第(4)行代碼,如果沒有把'小明'這參數(shù)給帶上
則會報錯,因為第(1)行代碼的name沒有參數(shù)傳遞給它,以致無法運行下面的代碼
(3)當(dāng)return沒有寫上值時,會默認(rèn)返回None,也就是說第(3)行代碼其實是return None
(4)greet('小明')中的小明叫做實參數(shù),def greet(name)中的name叫做形參數(shù)
2、函數(shù)的調(diào)用(重點)
用法1:函數(shù)名(參數(shù))
例子:
(1)def greet(name):
(2) print(name+‘你好’)
(3) return
(4)greet('小明')
***上面已經(jīng)解析過就不在解析了
用法2:函數(shù)名()
例子:
(1)def greet():
(2) print(‘你好’)
(3) return
(4)greet()
解示:該例子和上一個例子不一樣的是,不需要參數(shù)進行傳遞,所以當(dāng)定義函數(shù)時,如果有參數(shù),調(diào)用函數(shù)時也需要附上給參數(shù)所帶的值
3、函數(shù)的參數(shù)傳遞
用法1:位置實參
例子:
(1)def pet(name,age):
(2) print('我的寵物名字叫'+name)
(3) print('我的寵物年齡是'+'age')
(4)pet('老王',5)
解示:第(4)行代碼調(diào)用了pet的函數(shù),并給pet函數(shù)傳遞了兩個實參數(shù),一個是'老王',一個是5;分別傳給了pet函數(shù)中的name和age兩個形參
****注意,位置實參傳遞是一一對應(yīng)的,需要考慮函數(shù)調(diào)用中的實參順序
用法2:關(guān)鍵字實參
例子:
(1)def pet(name,age):
(2) print('我的寵物名字叫'+name)
(3) print('我的寵物年齡是'+'age')
(4)pet(age=5,name='老王')
解示:該例子與上面的例子有點不太一樣,關(guān)鍵字實參可以讓你無需考慮函數(shù)調(diào)用中的實參順序
用法3:默認(rèn)值
例子:
(1)def pet(name,age,weight=20):
(2) print('我的寵物名字叫'+name)
(3) print('我的寵物年齡是'+'age')
(4) print('我的寵物體重是'+'weight'+'斤')
(5)pet('老王',5)
解示:該例子與上面的兩個例子有點不太一樣,在第五行調(diào)用函數(shù)時,并沒有給weight形參傳遞參數(shù),但依舊是可以正常運行,是因為在定義函數(shù)時,
形參weight已經(jīng)被賦值為20,所以無需再調(diào)用函數(shù)時給weight參數(shù)傳參值
用法4:不定長參數(shù)
例子:
(1)def menu(*barbeque):
(2) print(barbeque)
(3)menu('烤雞翅','烤茄子','烤玉米')
解示:首先不定長參數(shù)的標(biāo)志是'*',而且打印出來的結(jié)果是(烤雞翅,烤茄子,烤玉米),這是一個元組
4、返回值
用法:返回簡單值
例子:
(1)def pet(name,age):
(2) pet_message=name+''+'age'
(3) return pet_message
(4)dog=pet('老王',5)
(4)print(dog)
解示:通過return語句將結(jié)果返回到函數(shù)中的第(4)代碼行中,調(diào)用返回值的函數(shù)時,需要提供一個變量,用于存儲返回的值;
在例子中,通過定義變量pet_message來存儲name和age
****注意
(1)當(dāng)執(zhí)行了return函數(shù)時,程序會終止運行下去
(2)函數(shù)可返回任何類型的值,包括列表和字典等較復(fù)雜的數(shù)據(jù)類型
5、變量的作用域
(1)全局變量和局部變量
例子:
(1)x=99
(2)def num():
(3) x=88
(4) print(x)
(5)print(x)
(6)num()
解示:
1、第一行代碼為全局變量,第(3)行代碼為局部變量
2、局部變量的作用域只限在函數(shù)里面,全局變量可以給局部變量使用
3、打印的結(jié)果分別是99,88
****知識拓展
1、若在函數(shù)中局部變量想修改全局變量,則要在前面加上global
例子:
(1)x=99
(2)def num():
(3) global x=88
(4) print(x)
(5)print(x)
(6)num()
打印結(jié)果為88,88
2、當(dāng)函數(shù)內(nèi)的變量和全局變量名重合時,例如以上例子的第(1)行代碼和第(3)行代碼,則python中會默認(rèn)第(3)行代碼為局部變量
3、當(dāng)使用for和while循環(huán)時,不用使用global也可以用局部變量來修改全局變量
例子:
(1)i=0
(2)while <2:
(3) i=i+1
(4)print(i)
打印的結(jié)果為2