bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

Python中的裝飾器可以做什么-創新互聯

這篇文章主要講解了“Python中的裝飾器可以做什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python中的裝飾器可以做什么”吧!

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:申請域名、網頁空間、營銷軟件、網站建設、濟水街道網站維護、網站推廣。

閱讀目錄

一 什么是裝飾器

二 裝飾器需要遵循的原則

三 實現裝飾器知識儲備

四 高階函數

五 函數嵌套

六 閉包

七 無參裝飾器

八 裝飾器應用示例

一 什么是裝飾器

器即函數

裝飾即修飾,意指為其他函數添加新功能

裝飾器定義:本質就是函數,功能是為其他函數添加新功能

二 裝飾器需要遵循的原則

1.不修改被裝飾函數的源代碼(開放封閉原則)

2.為被裝飾函數添加新功能后,不修改被修飾函數的調用方式

三 實現裝飾器知識儲備

裝飾器=高階函數+函數嵌套+閉包

四 高階函數

高階函數定義:

1.函數接收的參數是一個函數名

2.函數的返回值是一個函數名

3.滿足上述條件任意一個,都可稱之為高階函數

 def foo():

  print('我的函數名作為參數傳給高階函數')

def gao_jie1(func):

  print('我就是高階函數1,我接收的參數名是%s' %func)

  func()

def gao_jie2(func):

  print('我就是高階函數2,我的返回值是%s' %func)

  return func

gao_jie1(foo)

gao_jie2(foo)

 #高階函數應用1:把函數當做參數傳給高階函數

import time

def foo():

  print('from the foo')

def timmer(func):

  start_time=time.time()

  func()

  stop_time=time.time()

  print('函數%s 運行時間是%s' %(func,stop_time-start_time))

timmer(foo)

#總結:我們確實為函數foo增加了foo運行時間的功能,但是foo原來的執行方式是foo(),現在我們需要調用高階函數timmer(foo),改變了函數的調用方式

 #高階函數應用2:把函數名當做參數傳給高階函數,高階函數直接返回函數名

import time

def foo():

  print('from the foo')

def timmer(func):

  start_time=time.time()

  return func

  stop_time=time.time()

  print('函數%s 運行時間是%s' %(func,stop_time-start_time))

foo=timmer(foo)

foo()

#總結:我們確實沒有改變foo的調用方式,但是我們也沒有為foo增加任何新功能

 高階函數總結

1.函數接收的參數是一個函數名

作用:在不修改函數源代碼的前提下,為函數添加新功能,

不足:會改變函數的調用方式

2.函數的返回值是一個函數名

作用:不修改函數的調用方式

不足:不能添加新功能

五 函數嵌套

 1 def father(name):

 2   print('from father %s' %name)

 3   def son():

 4     print('from son')

 5     def grandson():

 6       print('from grandson')

 7     grandson()

 8   son()

 9

10 father('tom')

六 閉包

 1 '''

 2 閉包:在一個作用域里放入定義變量,相當于打了一個包

 3 '''

 4 def father(name):

 5   def son():

 6     # name='jack'

 7     print('is [%s]' %name)

 8     def grandson():

 9       # name='wupeiqi'

10       print('is [%s]' %name)

11     grandson()

12   son()

13

14 father('jack')

七 無參裝飾器

無參裝飾器=高級函數+函數嵌套

基本框架

1 #這就是一個實現一個裝飾器最基本的架子

2 def timer(func):

3   def wrapper():

4     func()

5   return wrapper

加上參數

1 def timer(func):

2   def wrapper(*args,**kwargs):

3     func(*args,**kwargs)

4   return wrapper

加上功能

 1 import time

2 def timer(func):

3   def wrapper(*args,**kwargs):

4     start_time=time.time()

5     func(*args,**kwargs)

6     stop_time=time.time()

7     print('函數[%s],運行時間是[%s]' %(func,stop_time-start_time))

8   return wrapper

 加上返回值

 1 import time

2 def timer(func):

3   def wrapper(*args,**kwargs):

4     start_time=time.time()

5     res=func(*args,**kwargs)

6     stop_time=time.time()

7     print('函數[%s],運行時間是[%s]' %(func,stop_time-start_time))

8     return res

9   return wrapper

 使用裝飾器

 1 def cal(array):

2   res=0

3   for i in array:

4     res+=i

5   return res

6

7 cal=timer(cal)

8 cal(range(10))

 語法糖@

 1 @timer  #@timer就等同于cal=timer(cal)

2 def cal(array):

3   res=0

4   for i in array:

5     res+=i

6   return res

7

8 cal(range(10))

八 裝飾器應用示例

 user_list=[

  {'name':'alex','passwd':'123'},

  {'name':'linhaifeng','passwd':'123'},

  {'name':'wupeiqi','passwd':'123'},

  {'name':'yuanhao','passwd':'123'},

]

current_user={'username':None,'login':False}

def auth_deco(func):

  def wrapper(*args,**kwargs):

    if current_user['username'] and current_user['login']:

      res=func(*args,**kwargs)

      return res

    username=input('用戶名: ').strip()

    passwd=input('密碼: ').strip()

    for index,user_dic in enumerate(user_list):

      if username == user_dic['name'] and passwd == user_dic['passwd']:

        current_user['username']=username

        current_user['login']=True

        res=func(*args,**kwargs)

        return res

        break

    else:

      print('用戶名或者密碼錯誤,重新登錄')

  return wrapper

@auth_deco

def index():

  print('歡迎來到主頁面')

@auth_deco

def home():

  print('這里是你家')

def shopping_car():

  print('查看購物車啊親')

def order():

  print('查看訂單啊親')

print(user_list)

# index()

print(user_list)

home()

 user_list=[

  {'name':'tom','passwd':'123'},

  {'name':'jack','passwd':'123'},

 ]

current_user={'username':None,'login':False}

def auth(auth_type='file'):

  def auth_deco(func):

    def wrapper(*args,**kwargs):

      if auth_type == 'file':

        if current_user['username'] and current_user['login']:

          res=func(*args,**kwargs)

          return res

        username=input('用戶名: ').strip()

        passwd=input('密碼: ').strip()

        for index,user_dic in enumerate(user_list):

          if username == user_dic['name'] and passwd == user_dic['passwd']:

            current_user['username']=username

            current_user['login']=True

            res=func(*args,**kwargs)

            return res

            break

        else:

          print('用戶名或者密碼錯誤,重新登錄')

      elif auth_type == 'ldap':

        print('auth')

        res=func(*args,**kwargs)

        return res

    return wrapper

  return auth_deco

#auth(auth_type='file')就是在運行一個函數,然后返回auth_deco,所以@auth(auth_type='file')

#就相當于@auth_deco,只不過現在,我們的auth_deco作為一個閉包的應用,外層的包auth給它留了一個auth_type='file'參數

@auth(auth_type='ldap')

def index():

  print('歡迎來到主頁面')

@auth(auth_type='ldap')

def home():

  print('home')

def shopping_car():

  print('shopping')

def order():

  print('check order')

# print(user_list)

index()

# print(user_list)

home()

感謝各位的閱讀,以上就是“Python中的裝飾器可以做什么”的內容了,經過本文的學習后,相信大家對Python中的裝飾器可以做什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創新互聯,小編將為大家推送更多相關知識點的文章,歡迎關注!

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

文章名稱:Python中的裝飾器可以做什么-創新互聯
文章起源:http://vcdvsql.cn/article38/csepsp.html

成都網站建設公司_創新互聯,為您提供自適應網站、品牌網站設計、響應式網站App開發建站公司、網站維護

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都app開發公司