python功能函数_Python-功能函数的使用
Python中的函數(shù)提供了有組織的,可重用的代碼來(lái)執(zhí)行一組操作。函數(shù)簡(jiǎn)化了編碼過(guò)程,防止冗余邏輯,并使代碼更容易遵循。
定義和調(diào)用簡(jiǎn)單函數(shù)
使用def語(yǔ)句來(lái)定義Python中的函數(shù)最常見(jiàn)的方式。這種說(shuō)法是所謂的單條復(fù)合語(yǔ)句的語(yǔ)法如下:
deffunction_name(parameters):
statement(s)
function_name被稱為標(biāo)識(shí)符的功能。由于函數(shù)定義是一個(gè)可執(zhí)行語(yǔ)句其執(zhí)行綁定功能名稱可以在以后使用的標(biāo)識(shí)符被稱為函數(shù)對(duì)象。
parameters是一個(gè)可選的標(biāo)識(shí)符列表,綁定到調(diào)用函數(shù)時(shí)作為參數(shù)提供的值。函數(shù)可以具有任意數(shù)量的參數(shù),這些參數(shù)由逗號(hào)分隔。
statement(s)-也被稱為函數(shù)體-是每個(gè)函數(shù)被調(diào)用時(shí)執(zhí)行的語(yǔ)句的一個(gè)非空序列。這意味著一個(gè)函數(shù)體不能為空。
這里有一個(gè)簡(jiǎn)單的函數(shù)定義,目的是打印的一個(gè)例子Hello每次被稱為時(shí)間:
defgreet():print("Hello")
現(xiàn)在,讓我們把定義的greet()函數(shù):
greet()#Out: Hello
這是一個(gè)函數(shù)定義的另一個(gè)例子,它接受一個(gè)參數(shù),并在每次調(diào)用函數(shù)時(shí)顯示傳入的值:
defgreet_two(greeting):print(greeting)
在此之后,greet_two()功能必須與參數(shù)調(diào)用:
greet_two("Howdy")#Out: Howdy
也可以給該函數(shù)參數(shù)一個(gè)默認(rèn)值:
def greet_two(greeting="Howdy"):print(greeting)
現(xiàn)在可以調(diào)用該函數(shù)而不給出值:
greet_two()#Out: Howdy
您會(huì)注意到,與許多其他語(yǔ)言不同,您不需要顯式聲明函數(shù)的返回類型。Python函數(shù)可以通過(guò)返回任何類型的值return關(guān)鍵字。一個(gè)函數(shù)可以返回任意數(shù)量的不同類型!
defmany_types(x):if x <0:return "Hello!"
else:return0print many_types(1)print many_types(-1)#Output:
0
Hello!
只要調(diào)用者正確地處理它,這是完全有效的Python代碼。
到達(dá)執(zhí)行結(jié)束沒(méi)有return語(yǔ)句的函數(shù)總是返回None:
defdo_nothing():pass
print(do_nothing())#Out: None
如前所述,函數(shù)定義必須有一個(gè)函數(shù)體,一個(gè)非空的語(yǔ)句序列。因此,pass語(yǔ)句作為函數(shù)體,這是一個(gè)空操作-當(dāng)執(zhí)行它,什么都不會(huì)發(fā)生。當(dāng)語(yǔ)句需要語(yǔ)句時(shí),它作為占位符是有用的,但是不需要執(zhí)行代碼。
用任意數(shù)量的參數(shù)定義函數(shù)
位置參數(shù)的任意數(shù)量:
定義一個(gè)能夠獲取任意數(shù)量的參數(shù)的函數(shù)可以通過(guò)在參數(shù)前面加上一個(gè)參數(shù)來(lái)完成*
def func(*args):#args will be a tuple containing all values that are passed in
for i inargs:print(i)
func(1, 2, 3) #Calling it with 3 arguments#Out: 1#2#3
list_of_arg_values= [1, 2, 3]
func(*list_of_arg_values) #Calling it with list of values, * expands the list#Out: 1#2#3
func()#Calling it without arguments#No Output
你不能提供一個(gè)默認(rèn)的args,例如func(*args=[1, 2, 3])將引發(fā)一個(gè)語(yǔ)法錯(cuò)誤(甚至不會(huì)編譯)。
你不能調(diào)用函數(shù)時(shí),例如通過(guò)名稱提供這些func(*args=[1, 2, 3])會(huì)提高一個(gè)TypeError。
但是,如果你已經(jīng)有了你的論點(diǎn)在數(shù)組(或其他Iterable),你可以調(diào)用你的功能如下:func(*my_stuff)。
這些參數(shù)(*args)可以通過(guò)索引訪問(wèn),例如args[0]將返回第一個(gè)參數(shù)
關(guān)鍵字參數(shù)的任意數(shù)目
您可以通過(guò)定義在定義的參數(shù)取一個(gè)名字參數(shù)任意數(shù)量2?*在它的面前:
def func(**kwargs):#kwargs will be a dictionary containing the names as keys and the values as values
for name, value inkwargs.items():print(name, value)
func(value1=1, value2=2, value3=3) #Calling it with 3 arguments#Out: value2 2#value1 1#value3 3
func()#Calling it without arguments#No Out put
my_dict= {‘foo‘: 1, ‘bar‘: 2}
func(**my_dict) #Calling it with a dictionary#Out: foo 1#bar 2
你不能提供這些沒(méi)有名字,例如func(1, 2, 3)將引發(fā)一個(gè)TypeError。
kwargs是一個(gè)普通的本地python字典。例如,args[‘value1‘]將給予參數(shù)的值value1。請(qǐng)務(wù)必先確認(rèn)是否有這樣的說(shuō)法或KeyError將提高。
警告
您可以將這些與其他可選和必需的參數(shù)混合,但在定義內(nèi)的順序很重要。
該位置/關(guān)鍵字參數(shù)放在第一位。(必需參數(shù))。
然后是任意?*arg參數(shù)。(可選的)。
那么只有關(guān)鍵字的論據(jù)來(lái)下一個(gè)。(需要)。
最后,任意關(guān)鍵字?**kwargs來(lái)了。(可選的)。
#|-positional-|-optional-|---keyword-only--|-optional-|
def func(arg1, arg2=10 , *args, kwarg1, kwarg2=2, **kwargs):pass
arg1必須給予,否則一個(gè)TypeError上升。它可以給出作為位置(func(10))或關(guān)鍵字參數(shù)(func(arg1=10))。
kwarg1也必須給予,但它只能作為關(guān)鍵字參數(shù)來(lái)提供:func(kwarg1=10)。
arg2和kwarg2是可選的。如果該值要更改的相同的規(guī)則arg1(無(wú)論是位置還是關(guān)鍵字)和kwarg1(僅限于關(guān)鍵字)適用。
*args捕獲額外的位置參數(shù)。但是注意,arg1并arg2必須作為位置參數(shù)傳遞參數(shù)提供*args:func(1, 1, 1, 1)。
**kwargs捕捉所有其他關(guān)鍵字參數(shù)。在這種情況下,即沒(méi)有任何參數(shù)arg1,arg2,kwarg1或kwarg2。例如:func(kwarg3=10)。
在Python 3,你可以使用*單獨(dú)指示所有后續(xù)參數(shù)必須指定為關(guān)鍵字。比如math.isclose在Python 3.5的功能和更高的使用規(guī)定def math.isclose (a, b, *, rel_tol=1e-09, abs_tol=0.0),這意味著前兩個(gè)參數(shù)可以在位置上提供,但可選的第三個(gè)和第四個(gè)參數(shù)只能作為關(guān)鍵字參數(shù)提供。
Python 2.x不支持僅關(guān)鍵字的參數(shù)。這種行為可以被效仿kwargs:
def func(arg1, arg2=10, **kwargs):try:
kwarg1= kwargs.pop("kwarg1")exceptKeyError:raise TypeError("missing required keyword-only argument: ‘kwarg1‘")
kwarg2= kwargs.pop("kwarg2", 2)#function body ...
有關(guān)命名的注意事項(xiàng)
命名可選位置參數(shù)的約定args和可選關(guān)鍵字參數(shù)kwargs只是你一個(gè)約定可以使用任何你喜歡的名字,但它是遵循慣例有用的,讓其他人知道你在做什么,甚至自己以后所以請(qǐng)不要。
注意唯一性
任何功能可以與被定義沒(méi)有或者一個(gè)?*args和無(wú)或一種?**kwargs,但不與每一個(gè)以上。還*args?必須是最后一個(gè)位置參數(shù),并**kwargs必須是最后一個(gè)參數(shù)。試圖使用的任一個(gè)以上的將導(dǎo)致一個(gè)語(yǔ)法錯(cuò)誤異常。
有關(guān)可選參數(shù)的嵌套函數(shù)的注意事項(xiàng)
這是可以嵌套這樣的功能和一般的慣例是刪除代碼已處理的項(xiàng)目,但如果你是傳承的參數(shù)需要傳遞一個(gè)可選的位置ARGS*前綴和可選關(guān)鍵字ARGS一個(gè)**前綴,否則ARGS可以作為列表或元組傳遞,并將kwargs作為單個(gè)字典傳遞。例如:
def fn(**kwargs):print(kwargs)
f1(**kwargs)def f1(**kwargs):print(len(kwargs))
fn(a=1, b=2)#Out:#{‘a(chǎn)‘: 1, ‘b‘: 2}#2
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的python功能函数_Python-功能函数的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 官能症有哪些症状
- 下一篇: python opengl_Python