一:定義函數
1.定義函數
- 函數代碼塊以 def 關鍵詞開頭,後接函數辨別符名稱和圓括号()。
- 任何傳入參數和自變量必須放在圓括号中間。圓括号之間可以用于定義參數。
- 函數的第一行語句可以選擇性地使用文檔字元串—用于存放函數說明。
- 函數内容以冒号起始,并且縮進。
- return [表達式] 結束函數,選擇性地傳回一個值給調用方。不帶表達式的return相當于傳回 None。
2.函數調用
1 # -*- coding: UTF-8 -*-
2 # 定義函數
3 def printme(str):
4 "列印任何傳入的字元串"
5 print str;
6 return;
7
8 # 調用函數
9 printme("我要調用使用者自定義函數!");
10 printme("再次調用同一函數");
3.效果
二:參數傳遞的問題
1.介紹
在 python 中,類型屬于對象,變量是沒有類型的。

2.程式
1 # -*- coding: UTF-8 -*-
2 #################################################
3 def ChangeInt( a ):
4 a = 10
5 b = 2
6 ChangeInt(b)
7 print b
8
9 #################################################
10 # 可寫函數說明
11 def changeme(mylist):
12 "修改傳入的清單"
13 mylist.append([1, 2, 3, 4]);
14 print "函數内取值: ", mylist
15 return
16 # 調用changeme函數
17 mylist = [10, 20, 30];
18 changeme(mylist);
19 print "函數外取值: ", mylist
三:參數
必備參數
關鍵字參數
預設參數
不定長參數
2.必備參數
必備參數須以正确的順序傳入函數。調用時的數量必須和聲明時的一樣。
就是定義的函數中有參數,調用的時候必須将參數傳遞進去。
3.關鍵字參數
使用關鍵字參數允許函數調用時參數的順序與聲明時不一緻,因為 Python 解釋器能夠用參數名比對參數值。
1 # -*- coding: UTF-8 -*-
2 #################################################
3 # 可寫函數說明
4 def printinfo(name, age):
5 "列印任何傳入的字元串"
6 print "Name: ", name;
7 print "Age ", age;
8 return;
9
10 # 調用printinfo函數
11 printinfo(age=50, name="miki");
4.效果
4.預設參數
調用函數時,預設參數的值如果沒有傳入,則被認為是預設值。
1 # -*- coding: UTF-8 -*-
2 #################################################
3 # 可寫函數說明
4 def printinfo(name, age=35):
5 "列印任何傳入的字元串"
6 print "Name: ", name;
7 print "Age ", age;
8 return;
9
10 # 調用printinfo函數
11 printinfo(name="miki");
5.效果
6.不定長參數
你可能需要一個函數能處理比當初聲明時更多的參數。
1 # -*- coding: UTF-8 -*-
2 # 可寫函數說明
3 def printinfo(arg1, *vartuple):
4 "列印任何傳入的參數"
5 print "輸出: "
6 print arg1
7 for var in vartuple:
8 print var
9 return;
10
11 # 調用printinfo 函數
12 printinfo(10);
13 printinfo(70, 60, 50);
四:匿名函數
python 使用 lambda 來建立匿名函數。
- lambda隻是一個表達式,函數體比def簡單很多。
- lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。
- lambda函數擁有自己的命名空間,且不能通路自有參數清單之外或全局命名空間裡的參數。
- 雖然lambda函數看起來隻能寫一行,卻不等同于C或C++的内聯函數,後者的目的是調用小函數時不占用棧記憶體進而增加運作效率。
1 # -*- coding: UTF-8 -*-
2 # 可寫函數說明
3 sum = lambda arg1, arg2: arg1 + arg2;
4
5 # 調用sum函數
6 print "相加後的值為 : ", sum(10, 20)
7 print "相加後的值為 : ", sum(20, 20)
五:全局變量與局部變量
1.global
加上global就會變成全局變量,但是這個需要使得函數内的值指派到全局。
如下:
1 # -*- coding: UTF-8 -*-
2 globvar = 0
3
4 def set_globvar_to_one():
5 global globvar # 使用 global 聲明全局變量
6 globvar = 1
7
8 def print_globvar():
9 print(globvar) # 沒有使用 global
10
11 print globvar # 輸出 0
12 set_globvar_to_one()
13 print globvar # 輸出 1
14 print_globvar() # 輸出 1,函數内的 globvar 已經是全局變量
2.效果
六:小事例
1.清單翻轉
1 # -*- coding: UTF-8 -*-
2 def reverse(ListInput):
3 RevList=[]
4 for i in range (len(ListInput)):
5 RevList.append(ListInput.pop())
6 return RevList
7
8 ListInput=[1,2,3,4,5,6]
9 ListInput=reverse(ListInput);
10 print ListInput