5.2Python函式(二)

夢並不遙遠發表於2019-02-04

目錄

前言

這一篇式相繼上一篇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.顯示效果==

01.png

(二)高階函式

==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.執行效果==

02.png

(三)返回值函式

==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.執行效果==

03.png

(四)匿名函式

==1.說明==

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

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

注意:只能寫一個表示式,而且只能用一次。

==2.原始碼==

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

==3.執行效果==

04.png

(五)閉包函式

==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.執行效果==

06.png

作者:Mark

日期:2019/02/04 週一

相關文章