函數(shù)就是包裹一部分的代碼,實(shí)現(xiàn)某一個(gè)功能,達(dá)成某一個(gè)目的,而且當(dāng)這段代碼如果使用或者重復(fù)使用的時(shí)候,只需要很簡(jiǎn)單的調(diào)用即可,大大減少了代碼的維護(hù)難度。
滕州ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話(huà)聯(lián)系或者加微信:18980820575(備注:SSL證書(shū)合作)期待與您的合作!
可以反復(fù)調(diào)用,提高代碼的復(fù)用性,提升開(kāi)發(fā)效率,便于維護(hù)管理。
函數(shù)的定義要使用到關(guān)鍵字def
,且函數(shù)定義不會(huì)執(zhí)行函數(shù)中的代碼,而是需要調(diào)用函數(shù)才會(huì)執(zhí)行。
定義函數(shù)在關(guān)鍵字def
后面加上函數(shù)名,然后后面加上括號(hào),括號(hào)中可以酌情選擇是否寫(xiě)上參數(shù),在對(duì)應(yīng)的作用域中寫(xiě)上代碼。
# 語(yǔ)法:
def function_name([parameter0],[parameter1]):
code0
code1
code2
……
直接使用定義好的函數(shù)的函數(shù)名加上括號(hào),括號(hào)中寫(xiě)上對(duì)應(yīng)的參數(shù),就會(huì)執(zhí)行作用域中的代碼。
# 語(yǔ)法:
funciton_name([parameter0],[parameter1])
注意,只要函數(shù)只有在調(diào)用的時(shí)候才能執(zhí)行其中的代碼
定義一個(gè)沒(méi)有參數(shù)的函數(shù)
# 定義函數(shù)
def func():
print('this is function')
# 調(diào)用函數(shù)
func() # this is function
帶有參數(shù)的函數(shù)
# 定義函數(shù)
def func(name):
print('this is ' + name)
# 調(diào)用函數(shù)
func('msr') # this is msr
函數(shù)的命名和變量命名的規(guī)則是一樣的,推薦使用小駝峰命名法。
函數(shù)的參數(shù),是配合函數(shù)運(yùn)算的值。在函數(shù)中的代碼使用參數(shù)的時(shí)候,就和使用變量的方法是一樣的。
定義函數(shù)的時(shí)候的參數(shù)叫做形式參數(shù),形參就就相當(dāng)于定義變量的變量名,填的參數(shù)只是為了確定功能,所以叫作形式參數(shù);調(diào)用函數(shù)的時(shí)候的參數(shù)叫做實(shí)際參數(shù),實(shí)參就相當(dāng)于定義變量的時(shí)候的值,這個(gè)時(shí)候的參數(shù)具有實(shí)際的作用,所以叫作實(shí)際參數(shù)。
形參 | 實(shí)參 |
---|---|
普通形參 | 普通實(shí)參 |
默認(rèn)形參 | 關(guān)鍵字實(shí)參 |
普通收集形參 | |
命名關(guān)鍵字形參 | |
關(guān)鍵字收集形參 |
函數(shù)調(diào)用的時(shí)候的參數(shù)要和定義的時(shí)候一一對(duì)應(yīng)。
普通形參就是定義函數(shù)時(shí)在括號(hào)內(nèi)直接寫(xiě)參數(shù)名,普通形參沒(méi)有賦予值,所以在函數(shù)調(diào)用的時(shí)候必須要對(duì)普通形參賦予值,否則報(bào)錯(cuò)。
調(diào)用函數(shù)的時(shí)候直接寫(xiě)上的值就是普通實(shí)參。
# 直接寫(xiě)上參數(shù)名就是普通形參
def myName(name):
res = 'My name is %s' % name
print(res)
my_name = 'msr'
# 調(diào)用函數(shù)的時(shí)候直接寫(xiě)上的值就是普通實(shí)參
myName(my_name)
# 參數(shù)要一一對(duì)應(yīng),所以調(diào)用函數(shù)的時(shí)候不寫(xiě)參數(shù)就會(huì)報(bào)錯(cuò)
myName() # error
默認(rèn)形參就是在定義函數(shù)的時(shí)候,參數(shù)就指定了一個(gè)值,換句話(huà)說(shuō)默認(rèn)形參就是一個(gè)帶有默認(rèn)值的普通形參。在調(diào)用函數(shù)的時(shí)候如果給默認(rèn)參數(shù)指定了值,默認(rèn)參數(shù)的實(shí)際值就是調(diào)用處的值,如果沒(méi)有賦予值,默認(rèn)參數(shù)的值就是定義處的值。
# 定義函數(shù)的時(shí)候帶有默認(rèn)值的就是默認(rèn)參數(shù)
def myName(name='msr'):
res = 'My name is %s' % name
print(res)
# 調(diào)用處指定值
my_name = 'msr'
myName(my_name) # My name is msr
# 調(diào)用處不指定值
myName() # My name is msr
當(dāng)普通參數(shù)和默認(rèn)參數(shù)他同時(shí)存在的時(shí)候,默認(rèn)參數(shù)必須要在普通參數(shù)的后面,否則報(bào)錯(cuò)。
def myName(name, name1='msr'):
print(name, name1)
myName('wxd',) # wxd msr
普通實(shí)參就是在調(diào)用函數(shù)的時(shí)候直接填寫(xiě)值,這樣的賦值不能打亂順序,要按照形參定義的順序來(lái)寫(xiě)。
關(guān)鍵字實(shí)參是對(duì)具體的某個(gè)參數(shù)賦值,這樣就可以打亂參數(shù)的順序使用,但是全部使用關(guān)鍵字實(shí)參必須將所有普通形參全部使用關(guān)鍵字實(shí)參,否則報(bào)錯(cuò)
def name(name1, name2, name3, name4='沒(méi)有名字'):
print(name1, name2, name3, name4)
# 普通實(shí)參
name(111, 222, 333, 444) # 111 222 333 444
# 關(guān)鍵字實(shí)參
name(name2=444, name1=222, name3=111, name4=333) # 222 444 111 333
普通實(shí)參和關(guān)鍵字實(shí)參一起使用的時(shí)候,關(guān)鍵字實(shí)參也是不能寫(xiě)在普通實(shí)參的前面的。
注意要區(qū)分默認(rèn)形參和關(guān)鍵字實(shí)參,默認(rèn)形參和關(guān)鍵字實(shí)參在語(yǔ)法上是一模一樣的,都是給某個(gè)參數(shù)一個(gè)固定的值,且都必須跟在普通形參和實(shí)參之后。但是區(qū)分的方法很簡(jiǎn)單,默認(rèn)形參是形式參數(shù),在定義函數(shù)時(shí)的就是默認(rèn)形參,關(guān)鍵字實(shí)參是實(shí)際參數(shù),在調(diào)用函數(shù)時(shí)的就是關(guān)鍵字實(shí)參。
函數(shù)的實(shí)參要和形參一一對(duì)應(yīng),如果有普通實(shí)參沒(méi)有對(duì)應(yīng)的形參,普通收集參數(shù)就可以用來(lái)專(zhuān)門(mén)收集多余的普通實(shí)參,在普通形參的前面加上一個(gè)*
就是普通收集參數(shù),普通收集參數(shù)一般習(xí)慣命名為 args
。收集的數(shù)據(jù)會(huì)變成一個(gè)元組。
def func(name, *args):
print(name) # msr
print(args) # (1, 2, 3, 4, 5, 6)
func('msr', 1, 2, 3, 4, 5, 6)
關(guān)鍵字收集參數(shù)和普通收集參數(shù)的作用和普通收集參數(shù)的租用基本相同的,只不過(guò)關(guān)鍵字收集參數(shù)收集的是關(guān)鍵字實(shí)參,關(guān)鍵字收集參數(shù)在普通形參的前面加上 **
符號(hào),一般命名為kwargs
,收集的數(shù)據(jù)變成一個(gè)字典。
def func(*args, **kwargs):
print(args)
print(kwargs)
func(1, 2, 3, 4, name='msr', age=18, sex=0)
'''
結(jié)果:
(1, 2, 3, 4)
{'name': 'msr', 'age': 18, 'sex': 0}
'''
普通收集參數(shù)和關(guān)鍵字參數(shù)一起可以收集所有的實(shí)參
# 收集所有的實(shí)參
def func(*args, **kwargs):
print(args)
print(kwargs)
命名關(guān)鍵字參數(shù)就是在函數(shù)調(diào)用的時(shí)候,必須使用關(guān)鍵字實(shí)參進(jìn)行賦值的形參。
定義命名關(guān)鍵字參數(shù)的兩種方式:
def function_name(parameter, *, parameter2)參數(shù)2是命名關(guān)鍵字, * 后面的參數(shù)為命名關(guān)鍵字
**def function_name(*args, parameter, kwargs)
parameter是命名關(guān)鍵字,普通收集參數(shù)后面的普通形參是命名關(guān)鍵字參數(shù)
# 方法一, * 本身不是一個(gè)參數(shù):
def func(*, a, b, c, d):
print(a, b, c, d) # A B C D
func(a='A', b='B', c='C', d='D')
# 方法二:
def func(*args, a, b, c):
print(a, b, c) # 3 4 2
func(a=3, b=4, c=2)
* 和 ** 在函數(shù)的定義處,用來(lái)做收集操作,打包
* 和 ** 在函數(shù)的調(diào)用處,用來(lái)做打散操作,解包
* 在定義處用來(lái)收集普通實(shí)參,成為元組;在調(diào)用處用來(lái)打散容器成為普通實(shí)參,如果是字典,只獲取鍵。
** 在定義處用來(lái)收集關(guān)鍵字實(shí)參,成為字典;在調(diào)用處用來(lái)打散字典(只能是字典,且鍵為字符串)成為關(guān)鍵字實(shí)參。
def func(*args):
print(args)
lst = [1, 2, 3, 4, 5, 6]
# 如果將列表直接作為參數(shù)放入,lst就是一個(gè)參數(shù)
func(lst) # ([1, 2, 3, 4, 5, 6],)
# 如果在lst前面加上 * ,就將列表列表解包,每一個(gè)元素都是一個(gè)參數(shù)
func(*lst) # (1, 2, 3, 4, 5, 6)
相當(dāng)于將列表中的元素一個(gè)個(gè)拿出,當(dāng)成一個(gè)個(gè)普通實(shí)參給函數(shù)進(jìn)行調(diào)用,**也是一樣的。
def func(**kwargs):
print(kwargs)
dct = {'one': 1, 'two': 2, 'three': 3}
# ** 可以解包字典
func(**dct) # {'one': 1, 'two': 2, 'three': 3}
return可以返回自定義函數(shù)的值,叫做返回值,可以把函數(shù)最終運(yùn)算出的結(jié)果返回到函數(shù)的調(diào)用處。
不指定return返回值,返回None。
# 定義函數(shù)
def func():
print('hello')
# 調(diào)用函數(shù)
# 函數(shù)執(zhí)行打印'hello',沒(méi)有定義返回值,返回None給res
res = func()
print(res)
'''
結(jié)果:
hello
None
'''
定義返回值。
# 定義函數(shù)
def func():
print('hello')
return 'motherland'
# 調(diào)用函數(shù),返回'motherland'給res
res = func()
print(res)
'''
結(jié)果:
hello
motherland
'''
執(zhí)行return之后,函數(shù)后面未執(zhí)行的代碼不再執(zhí)行。
# 定義函數(shù)
def func():
print(1)
return 2
print(3)
# 調(diào)用函數(shù)
func()
'''
結(jié)果:
1
'''
python中的函數(shù)可以像變量一樣,動(dòng)態(tài)創(chuàng)建銷(xiāo)毀,當(dāng)作參數(shù)傳遞,作為值返回,叫第一類(lèi)對(duì)象,其他語(yǔ)言功能有限。
函數(shù)名是一個(gè)特殊的變量,可以作為變量使用和賦值;
def func():
print('hello motherland')
var = func
var() # hello motherland
函數(shù)可以像變量一樣銷(xiāo)毀
def func():
print('hello motherland')
del func
func() # error,不存在
函數(shù)名可以作為容器類(lèi)型數(shù)據(jù)的元素;
def func0():
print('func 0')
def func1():
print('func 1')
def func2():
print('func 2')
lst = [func0, func1, func2]
for i in lst:
i()
'''
結(jié)果:
func 0
func 1
func 2
'''
函數(shù)名可以作為函數(shù)的參數(shù);
def func1():
print('我是 func 1')
def func2(function):
function()
func2(func1) # 我是 func 1
函數(shù)名可以作為函數(shù)的返回值;
def func1():
print('我是 func 1')
def func2(function):
return function
res = func2(func1)
res() # 我是 func 1
在定義函數(shù)的時(shí)候,在函數(shù)的上方使用單行注釋、或者在下方使用多行注釋可以為函數(shù)注釋說(shuō)明。
可以使用__doc__
方法或者是help
函數(shù)查看。
使用help
函數(shù)查看在函數(shù)的注釋說(shuō)明。
# 這是我的第一個(gè)函數(shù)
# 函數(shù)的注釋在上方
def func():
pass
print(help(func))
'''
結(jié)果:
Help on function func in module __main__:
func()
# 這是我的第一個(gè)函數(shù)
# 函數(shù)的注釋在上方
None
'''
使用 __doc__
方法查看。
def func():
"""
這是我的第二個(gè)函數(shù)
函數(shù)的注釋在下方
"""
pass
# 使用
print(func.__doc__)
'''
結(jié)果:
這是我的第二個(gè)函數(shù)
函數(shù)的注釋在下方
'''
形參在一起使用的時(shí)候要哪找順序。
普通參數(shù) -> 默認(rèn)參數(shù) -> 普通收集參數(shù) -> 命名關(guān)鍵字參數(shù) -> 關(guān)鍵字收集參數(shù)
網(wǎng)頁(yè)名稱(chēng):python函數(shù)基礎(chǔ)
網(wǎng)站地址:http://chinadenli.net/article20/dsoghjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)站收錄、Google、品牌網(wǎng)站設(shè)計(jì)、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)