日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

Python的閉包和裝飾器你真的了解嗎_python

作者:尤諾. ? 更新時(shí)間: 2022-04-19 編程語(yǔ)言

閉包

閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。

def test1(k, b):
    def test1_1(x):
        print(k*x+b)
    return test1_1
t1 = test1(1, 2)
t1(0)
t1(1)
t1(2)

閉包中修改數(shù)據(jù)

x = 300
def test1():
    x = 200
    def test2():
        nonlocal x
        print("----1----x = {}".format(x))
        x = 100
        print("----2----x = {}".format(x))
    return test2
t1 = test1()
t1()

裝飾器

實(shí)現(xiàn)對(duì)無(wú)參數(shù)函數(shù)的裝飾器

def set_func(func):
    def call_func():
        print("裝飾器執(zhí)行")
        func()
    return call_func
@set_func   # 等價(jià)于sumNum = set_func(sumNum)
def sumNum():
    print("sumNum")
sumNum()

實(shí)現(xiàn)對(duì)有參數(shù)函數(shù)的裝飾器

# 對(duì)有參數(shù)、無(wú)返回值的函數(shù)進(jìn)行裝飾
def set_func(func):
    def call_func(num):
        print("裝飾器")
        func(num)
    return call_func
@set_func
def sumNum(num):
    print("sumNum = {}".format(num))
sumNum(100)

對(duì)不定長(zhǎng)參數(shù)的函數(shù)進(jìn)行裝飾

def set_func(func):
    def call_func(*args, **kwargs):
        print("裝飾器")
        func(*args, **kwargs)  # 拆包
    return call_func
@set_func
def sumNum(num, *args, **kwargs):
    print("sumNum = {}".format(num))
    print("args = {}".format(args))
    print("kwargs = {}".format(kwargs))
sumNum(100, 200, c=100)

對(duì)有返回值的函數(shù)進(jìn)行裝飾

def set_func(func):
    def call_func(*args, **kwargs):
        print("裝飾器")
        return func(*args, **kwargs)  # 拆包
    return call_func
@set_func
def sumNum(num, *args, **kwargs):
    print("sumNum = {}".format(num))
    print("args = {}".format(args))
    print("kwargs = {}".format(kwargs))
    return "200 ok"
sumNum(100, 200, c=100)

多個(gè)裝飾器對(duì)同一個(gè)函數(shù)裝飾

def add_h1(func):
    def h1():
        h1_str = "<h1>" + func() + "</h1>"
        return h1_str
    return h1

def add_a(func):
    def call_func():
    	a_str = "<a>" + func() + "</a>"
        return a_str
    return call_func

@add_h1
@add_a
def get_str():
    return "haha"
get_str()

輸出為:<h1><a>haha</a></h1>

總結(jié)

原文鏈接:https://blog.csdn.net/weixin_43670190/article/details/122916070

欄目分類
最近更新