Python語法day3-函式相關
阿新 • • 發佈:2018-11-26
Python語法day3-函式相關
-
函式的作用意義
方便程式碼重用;分解任務簡化程式邏輯;使程式碼更加模組化 -
函式的定義
def 函式名(引數1,引數2,.....): 函式體 注意縮排 Python中使用縮排標註同一程式碼塊 *引數,表示函式以元組的形式接受傳進來的資料 **引數,表示函式以字典的形式接受傳進來的資料
-
引數的拆包與裝包
拆包:將集合引數分解成單獨的個體,稱為拆包;
裝包:將傳遞進來的引數包裝成一個集合,稱為裝包; -
函式的返回值
return 你要返回的值
如果要返回多個元素,需要將其包裝成一個集合,或者元組,或者字典,返回後進行拆包就可以了; -
偏函式
概念:很多多引數函式大多數場景下大部分的引數可能不要改變,為了簡便操作,我們重新定義一個新函式,指定需要使用的函式的某個引數為某個固定的值,這個新函式就稱為“偏函式”,下面程式碼中test2 就是test的偏函式;
def test(a,b,c,d): return a+b+c+c def test2(a,b,c,d = 2) test(a,b,c,d) test2(a,b,c) #還可以使用系統函式來建立偏函式 import functools test2 = functools.partial(test, d = 2) test2(a,b,c)
-
高階函式
概念:當一個函式A的引數,就收的是另一個函式時,則把這個函式A稱為是“高階函式”,比如下圖中的sorted函式接受了getkey這個函式為引數,那麼sorted就是高階函式;
l =[{"a":"aa", "b":24},{"a":"ab", "b":21},{"a":"ba", "b":64}] def getkey(x): return x["a"] sorted(l, key = getkey)
-
返回函式
概念:函式內部的返回值是另外一個函式;
def f(flag): def f1(a,b,c) return a+b+c def f2(a,d,c) return a-b+c if flag == "+" return f1 else return f2 result = f("+") num = result(1,2,3)
-
匿名函式
概念:沒有名字的函式;
語法:lambda 引數1,引數2,…:執行語句(執行語句只能有一句)
#使用方法一: res = (lambda x,y : x+y)(1,2) print(res) #使用方法二: newFunc = lambda x,y : x+y res = newFunc(1,2) print(res)
-
閉包
概念:函式巢狀的基礎上,內層函式以及內層函式引用的外層變數整體稱為“閉包”,下面案例中,inFunc(a,b)函式整體使用了外部函式的引數/變數,那麼它整體就稱為“閉包”;
#案例1 def outFunc(a,b) def inFunc(a,b) print(a+b) #案例2 def outFunc() a = 10 def inFunc() nonlocal a print(a) #注意事項 1.若要在閉包內修改外部變數,需要使用nonlocal宣告,否則為新變數定義
-
裝飾器
概念:在函式名及函式體不改變的前提下,為函式附加一些額外的程式碼;裝飾器是一種設計模式,只要滿足在不修改原本函式的基礎上,增加額外功能就可以稱為裝飾器;
在Python中可以直接在要裝飾的函式之前使用“@”後面加上要裝飾函式; -
生成器函式
概念:是一種特殊的迭代器(抽象層次更高);生成器只會遍歷一次;遇到return語句會丟擲迭代器停止異常;
建立方式:
1.把列表推導式的[]換成():
2.生成器函式:l = (i for i in range(1,100) if i % 2 == 0) for i in l: print(i)
#函式中要包含yield語句 #函式執行的結果就是一個生成器 def test(): print("xxx") for i in range(1, 100): yield i print(i, "+yield") g = test() print(next(g)) print(next(g))
產生資料的方式:
通過訪問迭代器的方式訪問資料,三種方式:next(生成器), 生成器.-next-()和for in等三種方法;send(指定上一次掛起的yield語句的返回值)函式:
第一次呼叫時要傳一個None進去;
相比於生成器.-next-(),send(引數)語句可以額外傳遞一個值給上一次操作被掛起的yield語句;關閉生成器:
生成器.close();
停止的原理是將生成器移動到最後一個來實現移動停止;