1. 程式人生 > >Python語法day3-函式相關

Python語法day3-函式相關

Python語法day3-函式相關

  1. 函式的作用意義

    方便程式碼重用;分解任務簡化程式邏輯;使程式碼更加模組化
  2. 函式的定義

    def 函式名(引數1,引數2,.....):
    	函式體
    	注意縮排
    	Python中使用縮排標註同一程式碼塊
    	*引數,表示函式以元組的形式接受傳進來的資料
    	**引數,表示函式以字典的形式接受傳進來的資料
    
  3. 引數的拆包與裝包

    拆包:將集合引數分解成單獨的個體,稱為拆包;
    裝包:將傳遞進來的引數包裝成一個集合,稱為裝包;
  4. 函式的返回值

    return 你要返回的值
    如果要返回多個元素,需要將其包裝成一個集合,或者元組,或者字典,返回後進行拆包就可以了;
  5. 偏函式

    概念:很多多引數函式大多數場景下大部分的引數可能不要改變,為了簡便操作,我們重新定義一個新函式,指定需要使用的函式的某個引數為某個固定的值,這個新函式就稱為“偏函式”,下面程式碼中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)
    
  6. 高階函式

    概念:當一個函式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)
    
  7. 返回函式

    概念:函式內部的返回值是另外一個函式;
    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)
    
  8. 匿名函式

    概念:沒有名字的函式;
    語法: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)
    
  9. 閉包

    概念:函式巢狀的基礎上,內層函式以及內層函式引用的外層變數整體稱為“閉包”,下面案例中,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宣告,否則為新變數定義
    
  10. 裝飾器

    概念:在函式名及函式體不改變的前提下,為函式附加一些額外的程式碼;裝飾器是一種設計模式,只要滿足在不修改原本函式的基礎上,增加額外功能就可以稱為裝飾器;
    在Python中可以直接在要裝飾的函式之前使用“@”後面加上要裝飾函式;
  11. 生成器函式

    概念:是一種特殊的迭代器(抽象層次更高);生成器只會遍歷一次;遇到return語句會丟擲迭代器停止異常;
    建立方式:
    1.把列表推導式的[]換成():
    l  = (i for i in range(1,100) if i % 2 == 0)
    for i in l:
        print(i)
    
    2.生成器函式:
    #函式中要包含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();
    停止的原理是將生成器移動到最後一個來實現移動停止;