函數是組織好的,可重複使用的,用來實現單一,或相關聯功能的程式碼片段。函數能提高應用的模組性,和程式碼的重複使用率,自己創建的函數叫做使用者自訂函數。 函數定義規格:1.函數程式碼區塊以 def 關鍵字開頭,後接函數識別碼名稱和圓括號()。
2.任何傳入參數和自變數必須放在圓括號中間,圓括號之間可以用來定義參數。
3.函數的第一行語句可以選擇性地使用文件字串—用於存放函數說明。
4.函數內容以冒號起始,且縮排。
5.return [表達式]結束函數,選擇性地傳回一個值給呼叫方。不含表達式的return相當於回傳 None。
函數定義語法:def 函數名稱(形參):函數體預設情況下,參數值和參數名稱是依函數宣告中定義的的順序相符起來的。 範例:#可以不定義形參>>> def
show():... print('show fun')...>>> show()show fun 簡單的計算面積的函數:>>> def
area(height,width):... a = height*width... return a...>>> area(4,5)20 函數呼叫 函數的呼叫直接使用函數名()這樣的方式,如果直接使用函數名,返回的是函數物理內容位址,當加上()後,才是代表執行函數函數的參數形參、實參> >> def
area(height,width):... a = height*width... return a...>>> area(4,5)20在這個例子中,height和width為形參,是為了定義函數的結構和邏輯使用的,而後面的4、5則為實參,是用戶在調用函數時,實際傳入的參數,實參的個數必須和形參保持一致,在調用時,形參的具體值根據實參傳入的順序一一對應,比如上面,4對應height,5對應width 關鍵字參數(指定參數)使用關鍵字參數允許函數調用時參數的順序與宣告時不一致,具體用法如下>>>
def area(height,width):... a = height*width... return a...>>>
area(width = 5,height = 4)# 我們在呼叫函數時指明具體形參的值就可以了預設參數呼叫函數時,如果沒有傳遞參數,則會使用預設參數。預設參數必須定義在所有形參的最後面>>>
def stu(name,age,grade=3):... print('name is %s,age is %s,grade is %s' %
(name,age,grade))...>>>
stu('ian',10) #在這裡沒有傳入grade參數,預設使用了grade =
3name is
ian,age is 10,grade is 3>>>
stu('isha',9,4)name is
isha,age is 9,grade is 4 動態參數#動態參數01,將傳入的實參全部加到一個元祖裡面def main2(*arg): print(arg,type(arg))main2(1,2,3,4) #動態參數02,將傳入的實參全部加到一個字典裡面def main3(**kwargs): print(kwargs,type(kwargs))main3(k1=12,k2='ian') #動態參數03,上面兩個項目合併def
main4(*args,**kwargs): print(args,type(args)) print(kwargs,type(kwargs))main4(1,2,k1=12,k2='ian') #上面的形參和這裡的實參順序不能顛倒,不然會報錯 #動態參數4,如果實參是變量,如何指定到動態參數裡面--->帶*def
main4(*args,**kwargs) : print(args,type(args)) print(kwargs,type(kwargs))m = [1,2]n =
{'k1':12,'k2':'ian'}main4(*m ,**n) 總結:Python的函數具有非常靈活的參數形態,既可以實現簡單的調用,又可以傳入非常複雜的參數。預設參數一定要用不可變對象,如果是可變對象,運作會有邏輯錯誤!要注意定義可變參數和關鍵字參數的語法:*args是可變參數,args接收的是一個tuple;**kwargs是關鍵字參數,kwargs接收的是一個dict。使用*args和**kwargs是Python的習慣寫法,當然也可以用其他參數名,但最好使用習慣用法。 匿名函數python 使用 lambda
來建立匿名函數。所謂匿名,意即不再使用 def
語句這樣標準的形式定義一個函數。 1.lambda 只是一個表達式,函數體比 def 簡單很多。
2.lambda的主體是一個表達式,而不是一個程式碼區塊。僅能在lambda表達式中封裝有限的邏輯進去。
3.lambda
函數擁有自己的命名空間,且無法存取自有參數清單以外或全域命名空間裡的參數。
4.雖然lambda函數看起來只能寫一行,卻不等同於C或C++的內聯函數,後者的目的是調用小函數時不佔用棧內存從而增加運行效率。
匿名函數語法lambda 函數的語法只包含一個語句,如下:lambda [arg1
[,arg2,.....argn]]:expression 例:>>>
su = lambda a,b,c: a + b + c>>> su(1,2, 3)6 return語句return用於退出函數,使用return [表達式]會在退出函數時傳回一個表達式,不帶參數的return回傳none >>> def
area(height,width) :... a = height*width... return a...>>> ar =
area(4,5)>>>
print('area is', ar)area is 20 全域變數和局部變數當你在函數定義內宣告變數的時候,它們與函數外具有相同名稱的其他變數沒有任何關係,即變數名稱對函數來說是
局部的。這稱為變數的 作用域 。所有變數的作用域是它們被定義的區塊,從它們的名稱被定義的那點開始。 局部變數:def func(x): print ('x is',x) x=2 print ('Changed local x to',x) x=50func(x)print ('x is still',x) 結果為:x is 50Changed local x to 2x is still 50 使用global語句如果你想要為一個定義在函數外的變數賦值,那麼你就得告訴Python這個變數名稱不是局部的,而是
全域的。我們使用global語句完成這項功能。沒有global語句,是不可能為定義在函數外的變數賦值的。 def func(): global x print ('x is',x) x=2 print ('Changed local x to',x) x=50func()print ('x is still',x) 結果為:x isprint ('x is still',x) 結果為:x isprint ('x is still',x) 結果為:x isprint ('x is still',x) 結果為:x isprint ('x is still',x) 結果為:x isprint ('x is still',x) 結果為:x isprint ('x is still',x) 結果為:x isprint ('x is still',x) 結果為:x isprint ('x is still',x) 結果為:x isprint ('x) 結果為:x is 50Changed local x to 2x is still 2 #global語句被用來宣告x是全域的,因此,當我們在函數內把值賦給x的時候,函數外的x的值也會直接改變
以上是Python基礎內容:函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!