1. 程式人生 > >python3學習筆記11(函式)

python3學習筆記11(函式)

函式

python提供了許多內建函式,例如print()。

自己建立的函式,叫做使用者自定義函式。

定義一個由自己想要功能的函式,以下是簡單的規則:

  • 函式程式碼塊以 def 關鍵詞開頭,後接函式識別符號名稱和圓括號 ()
  • 任何傳入引數和自變數必須放在圓括號中間,圓括號之間可以用於定義引數。
  • 函式的第一行語句可以選擇性地使用文件字串—用於存放函式說明。
  • 函式內容以冒號起始,並且縮排。
  • return [表示式] 結束函式,選擇性地返回一個值給呼叫方。不帶表示式的return相當於返回 None。

格式:

def 函式名(引數列表):

  函式體

def area(width,height):      #計算面積函式
return width*height
x = area(5,4)

引數

以下是呼叫函式時可使用的正式引數型別:

  1. 必需引數        #必需引數須以正確的順序傳入函式。呼叫時的數量必須和宣告時的一樣。
  2. 關鍵字引數            #函式呼叫使用關鍵字引數來確定傳入的引數值,允許函式呼叫時引數的順序與宣告時不一致
  3. 預設引數                #呼叫函式時,如果沒有傳遞引數,則會使用預設引數。例如def printinfo(name,age=33),age就是預設引數
  4. 不定長引數            #可能需要一個函式能處理比當初宣告時更多的引數。

不定長引數,基本語法如下:

def functionname([formal_args,] *var_args_tuple ):
"函式_文件字串"
function_suite
return [expression]

 

#可寫函式說明
def printinfo(arg1,*vartuple):
"列印任何傳入的引數"
print("輸出:")
print(arg1)
print(vartuple)
for var in vartuple:
print (var)
return

#呼叫printinfo函式
printinfo(10) #在函式呼叫時沒有指定引數,它就是一個空元組。我們也可以不向函式傳遞未命名的變數
printinfo(70,50,60) #加了星號 * 的引數會以元組(tuple)的形式匯入,存放所有未命名的變數

 

引數帶兩個星號 **基本語法如下:

def functionname([formal_args,] **var_args_dict ):
"函式_文件字串"
function_suite
return [expression]

def printinfo(arg1,**vardict):
"列印任何傳入的引數"
print("輸出: ")
print (arg1)
print(vardict)

printinfo(1,a=2,b=3) #加了兩個星號 ** 的引數會以字典的形式匯入


匿名函式

python 使用 lambda 來建立匿名函式。

所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函式。

  • lambda 只是一個表示式,函式體比 def 簡單很多。
  • lambda的主體是一個表示式,而不是一個程式碼塊。僅僅能在lambda表示式中封裝有限的邏輯進去。
  • lambda 函式擁有自己的名稱空間,且不能訪問自己引數列表之外或全域性名稱空間裡的引數。
  • 雖然lambda函式看起來只能寫一行,卻不等同於C或C++的行內函數,後者的目的是呼叫小函式時不佔用棧記憶體從而增加執行效率。

語法如下:

lambda [arg1 [,arg2,.....argn]]:expression

sum = lambda arg1,arg2: arg1+arg2

print("相加後的值是: ",sum(10,20))

return語句

return [表示式] 語句用於退出函式,選擇性地向呼叫方返回一個表示式。不帶引數值的return語句返回None。

def sum(arg1,arg2):
total = arg1 + arg2
print("函式內: ",total)
return total

total = sum(10,20)
print("函式外: ",total)