1. 程式人生 > >5.2Python函數(二)

5.2Python函數(二)

技術分享 block 需求 閉包 mbo b+ 兩個 日期 名稱

目錄

  • 目錄
  • 前言
  • (一)偏函數
    • ==1.說明==
    • ==2.原代碼==
    • ==3.顯示效果==
  • (二)高階函數
    • ==1.說明==
    • ==2.源代碼==
    • ==3.運行效果==
  • (三)返回值函數
    • ==1.說明==
    • ==2.源代碼==
    • ==3.運行效果==
  • (四)匿名函數
    • ==1.說明==
    • ==2.源代碼==
    • ==3.運行效果==
  • (五)閉包函數
    • ==1.說明==
    • ==2.源代碼==
    • ==3.運行效果==

目錄

前言

這一篇式相繼上一篇5.1Python函數(一)的進階文章。

一個重要的思想是:我們把”函數名“當成一個變量來處理。

(一)偏函數

==1.說明==

偏函數:在不修改原函數的原函數前提下,修改函數的默認值,新建的函數叫偏函數。

==2.原代碼==

# 定義一個有默認值的函數
def test1(a, b, c, d=1):
    print(a+b+c+d)


# 現在有一個需求,想把默認值改為c=2,d=3
# 我們需要在重新構造一個全新的函數?
# 不需要,下面的定義類似類的繼承,也就是偏函數的定義
def test2(a, b, c=2, d=3):
    test1(a, b, c, d)

# 調用偏函數
test2(1, 2)

==3.顯示效果==

技術分享圖片

(二)高階函數

==1.說明==

函數名也是一個變量,也可以通過賦值,傳遞給其他變量。

當函數的形參接收的是一個函數名的時候,則稱該函數是高階函數

==2.源代碼==

# 動態的計算兩個數
def caculate(num1, num2, caculatefun):
    result = caculatefun(num1, num2)
    print(result)


# 求差函數
def mysum(a, b):
    result = a + b
    print("求和函數")
    return result


# 求和和函數
def mysub(a, b):
    result = a - b
    print("求差函數")
    return result


# 調用高級函數
caculate(4, 2, mysum)
caculate(4, 2, mysub)

==3.運行效果==

技術分享圖片

(三)返回值函數

==1.說明==

當函數的返回值是:一個函數名稱時,我們稱返回值函數

==2.源代碼==

# 定義一個返回值函數
def get_fun(symbol):
    # 子函數求和
    def my_sum(a, b):
        return a+b

    # 子函數求差
    def my_sub(a, b):
        return a-b

    # 根據判斷返回不同的函數名
    if symbol == "+":
        return my_sum
    elif symbol == "-":
        return my_sub


# 調用返回函數
func = get_fun("+")
result = func(1, 2)
print(result)

==3.運行效果==

技術分享圖片

(四)匿名函數

==1.說明==

沒有名字的函數,我們稱匿名函數,也稱lambda函數。

語法:lambda var1, var2,……:表達式

註意:只能寫一個表達式,而且只能用一次。

==2.源代碼==

# 定義一個匿名函數
func = lambda x, y: x + y
result = func(1, 2)
print("結果是:", result)

==3.運行效果==

技術分享圖片

(五)閉包函數

==1.說明==

首先清楚兩個概念:

外部函數:在外出定義的函數。

內部函數:嵌套在一個函數裏面的和函數。

閉包函數的定義:(滿足三個條件)

  1. 必須有函數嵌套
  2. 內部函數引用到外部的變量
  3. 返回值是內部函數名

註:內部函數需要修改外部變量,需要用nolocal 聲明

==2.源代碼==

# 定義一個閉包函數
def test(a):
    b = 2
    def test2():
        nonlocal b
        b = 5
        print("a:", a)
        print("b:", b)
    return test2

# 調用閉包函數
fun = test(1)
fun()

==3.運行效果==

技術分享圖片

作者:Mark

日期:2019/02/04 周一

5.2Python函數(二)