Python學習筆記 閉包裝飾器的學習

2021-09-26 20:33:27 字數 2523 閱讀 2871

def test():

print(' ---->diudiudiu這是本來要執行的函式<---- ')

test()

# 2> 裝飾函式的建立:

def set_func(func):

def call_func():

print(' >>>>修改函式(一)<<<< ')

func() # 這個指代傳入裝飾函式的原函式

print(' >>>>修改函式(二)<<<< ')

return call_func

# 1> 在原函式上新增乙個裝飾器

@set_func # 等價於 test = set_func(test)

def test():

print(' ---->diudiudiu這是本來要執行的函式<---- ')

def main():

test()

if __name__ == '__main__':

main()

# 傳入帶參函式:

def set_func(func):

def call_func(num):

print(' >>>>修改函式(一) + %d <<<< ' %num)

func(num) # 這個指代傳入裝飾函式的原函式

print(' >>>>修改函式(二) + %d <<<< ' %num)

return call_func

# 1> 在原函式上新增乙個裝飾器,

@set_func # 等價於 test = set_func(test)

def test(num):

print(' ---->diudiudiu這是本來要執行的函式<---- ')

def main():

test(100)

if __name__ == '__main__':

main()

# 傳入不定函式

def set_func(func):

def call_func(*args, **kwargs): # 代表可以傳入不定長引數

print(' >>>>修改函式(一) <<<< ')

func(*args, **kwargs) # 對傳入的不定長引數進行拆包,傳送給原函式。不能寫成 func(args, kwargs)

print(' >>>>修改函式(二) <<<< ')

return call_func

# 1> 在原函式上新增乙個裝飾器,

@set_func # 等價於 test = set_func(test)

def test(num, *args, **kwargs):

print(' ---->diudiudiu這是本來要執行的函式<---- %d' %num)

print(' ---->diudiudiu這是本來要執行的函式<----', args)

print(' ---->diudiudiu這是本來要執行的函式<----', kwargs)

def main():

test(100)

test(100, 200)

test(100, 200, m = 300)

if __name__ == '__main__':

main()

# 裝飾帶返回值函式

def set_func(func):

def call_func(*args, **kwargs): # 代表可以傳入不定長引數

print(' >>>>修改函式(一) <<<< ')

return func(*args, **kwargs) # 此時在裝飾器中呼叫原函式就無法返回值,因為沒有任何接收的地方,需要修改此處以便於返回

# (★★★★★老師說 這種是通用裝飾器,如果原函式不加 return 那也沒任何問題,但是我發現,這句話打不出來,不知道算不算問題)

print(' >>>>修改函式(二) <<<< ')

return call_func

# 1> 在原函式上新增乙個裝飾器,

@set_func # 等價於 test = set_func(test)

def test(num, *args, **kwargs):

print(' ---->diudiudiu這是本來要執行的函式<---- %d' %num)

print(' ---->diudiudiu這是本來要執行的函式<----', args)

print(' ---->diudiudiu這是本來要執行的函式<----', kwargs)

return '________ok!__________' # 當原函式返回乙個ok的時候

def main():

# test(100, 1001, 2002, wc = '30')

a = test(100)

print(a)

if __name__ == '__main__':

main()

閉包 裝飾器(筆記)

閉包 乙個函式中巢狀另外乙個函式的定義 且內部的函式會用到外部函式的變數 def line k,b def create y x print k x b return create y myline line 1,2 myline 1 myline 2 myline line 11,22 mylin...

Python閉包 裝飾器

閉包 legb法則 所謂閉包,就是將組成函式的語句和這些語句的執行環境打包一起時得到的物件 閉包最重要的價值在於封裝上下文環境 下面有個列子來解釋下閉包 列 deffunx x print 開始 deffuny y returnx y print 結束 returnfuny x funx 4 pri...

python 閉包 裝飾器

2.閉包格式 return bar 返回內嵌函式 in test print in 3.使用原理 4.總結 二 裝飾器 2.格式 return test in 閉包函式返回內嵌函式 test aa test aa 裝飾 def aa 這兒如果有引數,test in也必須有一樣的引數,test in中...