函式
函式就是完成特定功能的一個語句組,這組語句可以作為一個單位使用,並且給它取一個名字。
可以通過函式名在程式的不同地方多次執行(這通常叫做函式呼叫),卻不需要在所有地方都重複編寫這些語句。
自定義函式
- 使用者自己編寫的
預定義的Python函式
- 系統自帶的一些函式,還有一些和第三方編寫的函式,如其他程式設計師編寫的一些函式,對於這些現成的函式使用者可以直接拿來使用。
為什麼使用函式
- 降低程式設計的難度
- 通常將一個複雜的大問題分解成一系列更簡單的小問題,然後將小問題繼續劃分成更小的問題,當問題細化為足夠簡單時,我們將可以分而治之。這時,我們可以使用函式來處理特定的問題,各個小問題解決了,大問題也就迎刃而解了。
- 程式碼重用
- 我們定義的函式可以在一個程式的多個位置使用,也可以用於多個程式。此外,我們還可以把函式放到一個模組中供其他程式設計師使用,同時,我們也可以使用其他程式定義的函式。這就避免了重複勞動,提供了工作效率。
函式定義和呼叫
當我們自己定義一個函式時,通常使用def語句,其語法形式如下所示:
def 函式名 (引數列表): #可以沒有引數函式體 def add(a, b): print a + b
呼叫函式的一般形式是:
函式名(引數列表) add(1, 2)
形式引數和實際引數
在定義函式時函式後面圓括號中的變數名稱叫做“形式引數”,或簡稱為“形參”
在呼叫函式時,函式名後面圓括號中的變數名稱叫做“實際引數”,或簡稱為“實參”
預設引數(預設引數)
預設引數只能從右至左給定,如果需要第一個引數給預設值,其他引數不給,那麼把第一個引數移到最後一個即可。
def add(a, b = 2): print a + b add(3) #result : 5
區域性變數和全域性變數
Python中的任何變數都有其特定的作用域。
在函式中定義的變數一般只能在該函式內部使用,這些只能在程式的特定部分使用的變數我們稱之為區域性變數。
在一個檔案頂部定義的變數可以供該檔案中的任何函式呼叫,這些可以為整個程式所使用的變數稱為全域性變數。
x = 100 #全域性變數,可以在檔案任何地方呼叫 def func(): x = 200 #區域性變數,只能在函式內部呼叫 print x func() #輸出200 print x #輸出100
global語句
強制宣告為全域性變數
x = 100 def func(): global x #強制宣告x為全域性變數,導致值被覆蓋 x = 200 func() print x #輸出200
函式返回值
函式被呼叫後會返回一個指定的值
函式呼叫後預設返回None
return返回值
返回值可以是任意型別
return執行後,函式終止
區分返回值和列印
def add(a, b): return a + b ret = add(1, 2) #將函式返回結果賦值給變數ret print ret #輸出3
向函式傳入元組和字典
func (*args)
def func(x, y): print x, y t = (1, 2) func(*t)
func (**kw)
def func(name='jack', age=30): print name,age d = {'age': 22, 'name' : 'mike'}; func(**d)
處理多餘實參
def func(*args, **kw)
def func(x, *args, **kw): print x print args print kw func(1, 2, 3, 4, 5, y=10, z=20) #輸出 1 (2, 3, 4, 5) {'y': 10, 'z': 20}
lambda表示式
- 匿名函式
lambda函式是一種快速定義單行的最小函式,是從Lisp借用來的,可以用在任何需要函式的地方。
lambda x,y:x*y
- 使用Python寫一些執行指令碼時,使用lambda可以省去定義函式的過程,讓程式碼更加精簡。
- 對於一些抽象的,不會別的地方再複用的函式,有時候給函式起個名字也是個難題,使用lambda不需要考慮命名的問題。
使用lambda在某些時候讓程式碼更容易理解。
lambda基礎
lambda語句中,冒號前是引數,可以有多個,用逗號隔開,冒號右邊的返回值。lambda語句構建的其實是一個函式物件
g = lambda x:x**2 print g <function <lambda> at 0x0000000002643A58>
lambda應用例項
reduce為逐次操作list裡的每項,接收的引數為2個,最後返回的為一個結果。
sum = reduce(lambda x,y:x*y, range(1,6)) print sum
switch語句
- switch語句用於編寫多分支結構的程式,類似與if...elif...else語句。
- switch語句表達的分支結構比if...elif...else語句表達的更清晰,程式碼的可讀性更高。
- 但是python並沒有提供switch語句
switch實現
- python可以通過字典實現switch語句的功能。
- 實現方法分為兩步
- 首先,定義一個字典
- 其次,呼叫字典的get()獲取相應的表示式
函式呼叫
通過字典呼叫函式
def add(a, b): return a + b def sub(a, b): return a - b def mul(a, b): return a * b def div(a, b): return a / b operator = {'+': add, '-': sub, '*': mul, '/': div} #通過字典實現switch語句的功能 def calc(a, o, b): return operator.get(o)(a, b) print calc(4, '+', 2) print calc(4, '-', 2) print calc(4, '*', 2) print calc(4, '/', 2)