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