最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python閉包裝飾器使用方法匯總

 更新時(shí)間:2020年06月29日 15:31:33   作者:xbhog  
這篇文章主要介紹了Python閉包裝飾器使用方法匯總,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

閉包內(nèi)容:

匿名函數(shù):能夠完成簡(jiǎn)單的功能,傳遞這個(gè)函數(shù)的引用,只有功能

普通函數(shù):能夠完成復(fù)雜的功能,傳遞這個(gè)函數(shù)的引用,只有功能

閉包:能夠完成較為復(fù)雜的功能,傳遞這個(gè)閉包中的函數(shù)以及數(shù)據(jù),因此傳遞是功能+數(shù)據(jù)

對(duì)象:能夠完成最復(fù)雜的功能,傳遞很多數(shù)據(jù)+很多功能,因此傳遞的是數(shù)據(jù)+功能

———————————————————

對(duì)全局函數(shù)進(jìn)行修改:在函數(shù)當(dāng)中加global,在閉包中外邊中的變量加nonlocal

閉包定義:有兩個(gè)函數(shù)嵌套使用,里面的函數(shù)可以使用外面函數(shù)所傳輸?shù)膮?shù),最后可傳遞的是里面函數(shù)的結(jié)構(gòu)與數(shù)據(jù)(個(gè)人理解)。

最后閉包可以在python中引申出裝飾器 ———————————————————

def closure():
  # 在函數(shù)內(nèi)部再定義一個(gè)函數(shù),
  # 并且這個(gè)函數(shù)用到了外邊函數(shù)的變量,那么將這個(gè)函數(shù)以及用到的一些變量稱之為閉包
  def closure_in(x):
    print('---------我是打不死的%s--------' %x)
  return closure_in
​
x = closure()
x('小強(qiáng)')
​
print('*'*20)
# -----加餐---------
def closure_1(a,b,c):
  def closure_on(x):
    print('-----%s加餐-------' %b)
    print(a*x + c)
  return closure_on
​
demo = closure_1(2,'小強(qiáng)',3) #傳closure_1函數(shù)
demo(4) #傳clsure_on函數(shù)
​
#注:函數(shù)不加括號(hào),調(diào)用的是函數(shù)本身【function】;函數(shù)加括號(hào),調(diào)用的是函數(shù)的return結(jié)果。

裝飾器內(nèi)容:

代碼要遵守‘開放封閉'原則;對(duì)已經(jīng)寫好的函數(shù)遵守封閉,對(duì)功能擴(kuò)展遵守開放;

# 裝飾器的作用:為了對(duì)原來(lái)的代碼上進(jìn)行擴(kuò)展
def decoration(func):
  def call_func():
    print('-------正在裝飾 -------' )
    func()
  return call_func
​
#@decoration   #--->demo_new = decoration(demo)
def demo():
  print('demo----')
​
demo_new = decoration(demo)
demo_new()

使用裝飾器來(lái)測(cè)試一個(gè)函數(shù)的運(yùn)行時(shí):

import time
def set_func(func):
  def call_func():
    start_time = time.time()
    func()
    stop_func = time.time()
    print(‘a(chǎn)lltimes is %f' %(stop_func-start_fun))
  return call_func
@set_func
def test1():
  print(‘——-test1———')
test1()
​
#等價(jià)于:
@set_func==test1 = set_func(test1)

1. 沒有參數(shù),沒有返回值的函數(shù)進(jìn)行裝飾:

def set_func(func):
  def call_func():
    print(‘———test2——-')
    print(‘———-test3——')
    func()
  return call_func

@set_func
def test1():
  print(‘——test1——-  ')

2. 對(duì)有參數(shù)無(wú)返回值的函數(shù)進(jìn)行裝飾:

def set_func(func):
  def call_func(a): #變
    print(‘———test2——-')
    print(‘———-test3——')
    func(a) #變
  return call_func

@set_func
def test1(num):
  print(‘——test1——- %d  ' %num)
​
test1(100) —->call_func(100)
test1(200)——>call_func(200)

復(fù)現(xiàn)裝飾器原理:

————————————————————————-

只要遇到@函數(shù) 裝飾器(這句話),在程序中就已經(jīng)執(zhí)行了!!

3. 不定長(zhǎng)參數(shù)的函數(shù)裝飾:

def set_func(func):
  def call_func(*args,**kwargs): #變
    print(‘———test2——-')
    print(‘———-test3——')
    func(*args,**kwargs) #(拆包)將元祖拆開,每個(gè)進(jìn)行傳輸;
    #func(args,kwargs)—>不行,相當(dāng)于傳遞了兩個(gè)參數(shù):一個(gè)元祖,一個(gè)字典。
  return call_func
@set_func
def test1(num,*args,**kwargs):
  print(‘——test1——- %d  ' %num)
  print(‘——test1——-  ' , args)
  print(‘——test1——- ' ,kwargs )
test1(100)
test1(100,200)
test1(100,200,300,mm=100)

注意:*args保存不定長(zhǎng)參數(shù),以元祖保存,**kwargs保存字典形式(mm=...)

4.對(duì)應(yīng)的返回值參數(shù)進(jìn)行裝飾、通用裝飾器:

#通用裝飾器
def set_func(func):
  print(“開始進(jìn)行裝飾———-”)
  def call_func(*args,**kwargs): #變
    print(‘———test2——-')
    print(‘———-test3——')
    return func(*args,**kwargs) #(拆包)將元祖拆開,每個(gè)進(jìn)行傳輸;如果沒有return ret返回none。
    #func(args,kwargs)—>不行,相當(dāng)于傳遞了兩個(gè)參數(shù):一個(gè)元祖,一個(gè)字典。
  return call_func

@set_func
def test1(num,*args,**kwargs):
  print(‘——test1——- %d  ' %num)
  print(‘——test1——-  ' , args)
  print(‘——test1——- ' ,kwargs )
  return ‘ok'  #—-返回給上面的func(),然后return func—ret
ret = test1(100)

5. 多個(gè)裝飾器對(duì)同一個(gè)函數(shù)進(jìn)行裝飾:

def add_qx(func):
  print(“——開始進(jìn)行裝飾權(quán)限1———-”)
  def call_func(*args,**kwargs): #變
    print(‘這是權(quán)限驗(yàn)證1')
    return func(*args,**kwargs)
  return call_func

​
def add_xx(func):
  print(“——開始進(jìn)行裝飾xx功能———-”)
  def call_func(*args,**kwargs): #變
    print(‘這是xx權(quán)限驗(yàn)證')
    return func(*args,**kwargs)
  return call_func
@add_qx
@add_xx
def test1():
  print(‘——test1——-')
test1()

首先執(zhí)行第一個(gè),但是第一個(gè)裝飾器下面不是函數(shù)(裝飾器原則:下面必須是函數(shù),否則不執(zhí)行),所以第一個(gè)函數(shù)先等待,等第二個(gè)裝飾器執(zhí)行后形成函數(shù)在交給第一個(gè)裝飾器;所以運(yùn)行結(jié)果是:

開始進(jìn)行裝飾xx的功能,

開始進(jìn)行裝飾權(quán)限1,

這是權(quán)限驗(yàn)證1,

這是xx權(quán)限驗(yàn)證,

——-test1——-,

——————裝飾器練習(xí)—————- 輸出格式:<td><h1>haha</h1></td>

def set_func_1(func):
  def call_func():
    return ‘<h1>' + func() + '</h1>'
  return call_func

​
def set_func_2(func):
  def call_func():
    return ‘<td>' + func() + '</td>'
  return call_func

@set_func_1()
@set_func_2()
def get_str():
  return ‘haha'

print(get_str())
最后執(zhí)行的效果: <h1><td>haha</td></h1>

6. 用類對(duì)函數(shù)進(jìn)行裝飾(了解):

class Test(object):
  def __init__(self,func):
    self.func = fun

  def __call__(self):
    print(‘這里是裝飾器的功能。。。。')
    return self.func()

@Test
def get_str():
  return ‘haha'

print(get_str())

以上就是裝飾器與閉包的全部?jī)?nèi)容

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 新版pycharm配置運(yùn)行參數(shù)的教程/pycharm2023

    新版pycharm配置運(yùn)行參數(shù)的教程/pycharm2023

    這篇文章主要介紹了新版pycharm配置運(yùn)行參數(shù)的教程/pycharm2023,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • python庫(kù)h5py入門詳解

    python庫(kù)h5py入門詳解

    本文只是簡(jiǎn)單的對(duì)h5py庫(kù)的基本創(chuàng)建文件,數(shù)據(jù)集和讀取數(shù)據(jù)的方式進(jìn)行介紹,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Python3.6 Schedule模塊定時(shí)任務(wù)(實(shí)例講解)

    Python3.6 Schedule模塊定時(shí)任務(wù)(實(shí)例講解)

    下面小編就為大家?guī)?lái)一篇Python3.6 Schedule模塊定時(shí)任務(wù)(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-11-11
  • 如何使用Python 打印各種三角形

    如何使用Python 打印各種三角形

    這篇文章主要介紹了如何使用Python 打印各種三角形,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Python登錄系統(tǒng)界面實(shí)現(xiàn)詳解

    Python登錄系統(tǒng)界面實(shí)現(xiàn)詳解

    這篇文章主要介紹了Python登錄系統(tǒng)界面實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下
    2019-06-06
  • python如何獲取.csv文件中的某一列或者某些列

    python如何獲取.csv文件中的某一列或者某些列

    這篇文章主要介紹了python如何獲取.csv文件中的某一列或者某些列問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • pygame實(shí)現(xiàn)非圖片按鈕效果

    pygame實(shí)現(xiàn)非圖片按鈕效果

    這篇文章主要介紹了pygame實(shí)現(xiàn)非圖片按鈕效果,不使用圖片制作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Python實(shí)現(xiàn)計(jì)算字符串中出現(xiàn)次數(shù)最多的字符示例

    Python實(shí)現(xiàn)計(jì)算字符串中出現(xiàn)次數(shù)最多的字符示例

    這篇文章主要介紹了Python實(shí)現(xiàn)計(jì)算字符串中出現(xiàn)次數(shù)最多的字符,涉及Python針對(duì)字符串的遍歷、統(tǒng)計(jì)等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • python實(shí)現(xiàn)登錄與注冊(cè)系統(tǒng)

    python實(shí)現(xiàn)登錄與注冊(cè)系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)登錄與注冊(cè)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • Python實(shí)現(xiàn)簡(jiǎn)單猜數(shù)字游戲

    Python實(shí)現(xiàn)簡(jiǎn)單猜數(shù)字游戲

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02

最新評(píng)論

瑞金市| 九江市| 万荣县| 洞口县| 南昌县| 建昌县| 香港 | 陇西县| 常州市| 香格里拉县| 贵定县| 漳平市| 古丈县| 贺兰县| 庄河市| 邹平县| 缙云县| 南城县| 会昌县| 镇江市| 土默特右旗| 贺兰县| 梓潼县| 甘孜县| 郧西县| 阿拉善右旗| 吴桥县| 赤水市| 桦甸市| 瓮安县| 全椒县| 玉门市| 永仁县| 池州市| 句容市| 澄江县| 溧水县| 嘉禾县| 韶关市| 苏州市| 临漳县|