標籤:預設值 語句 定義函數 情況下 報錯 none 不定長參數 自己的 括弧
函數是組織好的,可重複使用的,用來實現單一,或相關聯功能的程式碼片段。
函數能提高應用的模組性,和代碼的重複利用率。你已經知道Python提供了許多內建函數,比如print()。但你也可以自己建立函數,這被叫做使用者自訂函數。
定義一個函數
你可以定義一個由自己想要功能的函數,以下是簡單的規則:
- 函數代碼塊以 def 關鍵詞開頭,後接函數標識符名稱和圓括弧 ()。
- 任何傳入參數和自變數必須放在圓括弧中間,圓括弧之間可以用於定義參數。
- 函數的第一行語句可以選擇性地使用文檔字串—用於存放函數說明。
- 函數內容以冒號起始,並且縮排。
- return [運算式] 結束函數,選擇性地返回一個值給調用方。不帶運算式的return相當於返回 None。
- 文法
Python 定義函數使用 def 關鍵字,一般格式如下:
1 def 函數名(參數列表):2 函數體
預設情況下,參數值和參數名稱是按函式宣告中定義的順序匹配起來的。例如:讓我們使用函數來輸出"Hello World!":
1 def hello() :2 print("Hello World!")3 4 hello() #調用函數5 6 Hello World! #調用函數得到的結果更複雜點的應用,函數中帶上參數變數: 計算兩個數相乘的函數:
1 def calc(a,b):#a,b 是形參,形式參數2 #位置參數,也叫必填參數,不填會報錯3 res=a*b4 print(‘%s * %s = %s‘ %(a,b,res))5 calc(7,9)#7和8 是實參,實際參數6 7 #7 * 9 = 63 調用函數的結果
預設參數
- 調用函數時,如果沒有傳遞參數,則會使用預設參數。以下執行個體中如果沒有傳入 age 參數,則使用預設值:
1 def printinfo( name, age = 35 ): 2 "列印任何傳入的字串" 3 print ("名字: ", name) 4 print ("年齡: ", age) 5 return 6 #調用printinfo函數 7 printinfo( age=50, name="runoob" ) 8 print ("------------------------") 9 printinfo( name="runoob" )10 11 #以上執行個體輸出結果:12 名字: runoob13 年齡: 5014 ------------------------15 名字: runoob16 年齡: 35不定長參數你可能需要一個函數能處理比當初聲明時更多的參數。這些參數叫做不定長參數,和上述2種參數不同,聲明時不會命名。基本文法如下:
1 def functionname([formal_args,] *var_args_tuple ):2 "函數_文檔字串"3 function_suite4 return [expression]
加了星號(*)的變數名會存放所有未命名的變數參數。如果在函數調用時沒有指定參數,它就是一個空元組。我們也可以不向函數傳遞未命名的變數。如下執行個體:
# 可寫函數說明def printinfo( arg1, *vartuple ): "列印任何傳入的參數" print ("輸出: ") print (arg1) for var in vartuple: print (var) return # 調用printinfo 函數printinfo( 10 )printinfo( 70, 60, 50 )以上執行個體輸出結果:輸出:10輸出:706050匿名函數python 使用 lambda 來建立匿名函數。
所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函數。
- lambda 只是一個運算式,函數體比 def 簡單很多。
- lambda的主體是一個運算式,而不是一個代碼塊。僅僅能在lambda運算式中封裝有限的邏輯進去。
- 匿名函式擁有自己的命名空間,且不能訪問自己參數列表之外或全域命名空間裡的參數。
- 雖然lambda函數看起來只能寫一行,卻不等同於C或C++的內嵌函式,後者的目的是調用小函數時不佔用棧記憶體從而增加運行效率。
匿名函式的文法只包含一個語句,如下:
1 p = lambda x,y:x+1 #冒號後面的是函數體,也是函數的處理邏輯,冒號前面的是傳回值2 print(p(2))3 4 #結果是5 3
全域變數和局部變數定義在函數內部的變數擁有一個局部範圍,定義在函數外的擁有全域範圍。
局部變數只能在其被聲明的函數內部訪問,而全域變數可以在整個程式範圍內訪問。調用函數時,所有在函數內聲明的變數名稱都將被加入到範圍中。函數裡面定義的變數,都是局部變數,只在函數裡面使用,出了函數就不可以調用。如下執行個體:
1 total = 0 # 這是一個全域變數 2 3 def sum( arg1, arg2 ): 4 #返回2個參數的和." 5 total = arg1 + arg2 # total在這裡是局部變數. 6 print ("函數內是局部變數 : ", total) 7 return total 8 9 #調用sum函數10 sum( 10, 20 )11 print ("函數外是全域變數 : ", total)12 13 #以上執行個體輸出結果:14 15 函數內是局部變數 : 3016 函數外是全域變數 : 0
python之函數