函式物件、裝飾器、閉包函式

随机昵称yi發表於2024-05-20

函式物件

Python中一切皆物件

【1】可以直接被引用

定義一個函式用一個新的變數名來存,用新的變數名來呼叫

【2】可以作為元素被儲存

功能字典的函式地址

【3】函式可以作為引數傳遞給另一個函式

將函式的記憶體地址作為引數傳遞

【4】函式的返回值可以是函式

直接將函式的記憶體地址返回

閉包函式

  • 閉包函式就是對外界作用域有引用的函式
  • 內嵌函式對外部函式有引用,那這個內嵌函式就叫閉包函式
def outer():
    a = 1
    def inner():
        print(a)
        
整個outer就叫做閉包函式

閉包函式的應用

  • 裝飾器
  • 函式工廠模式
  • 封裝

閉包函式就是內嵌函式對外部函式作用域有引用的函式

def outer():
    def inner():
        print("hello world")
    return inner
res = outer()
print(res())

time模組

可以用來獲取時間

import time
def add():
    time.sleep(3)

def delete():
    time.sleep(4)

def outer(func):
    func = func

    def inner():
        start_time = time.time()
        func()
        end_time = time.time()
        print(f"{end_time - start_time} s")

    return inner

add = outer(add)
add()

裝飾器就是在不改變原來函式呼叫方式的基礎上增加額外的新功能

import time
def outer(func):
    func = func

    def inner():
        start_time = time.time()
        func()
        end_time = time.time()
        print(f"{end_time - start_time} s")

    return inner

@outer # add = outer(add)
def add():
    time.sleep(3)


def delete():
    time.sleep(4)

add()

# 裝飾器的語法糖

相關文章