欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

怎么用Python寫裝飾器

這篇文章主要講解了“怎么用Python寫裝飾器”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么用Python寫裝飾器”吧!

創(chuàng)新互聯(lián)專注于尖扎網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供尖扎營銷型網(wǎng)站建設(shè),尖扎網(wǎng)站制作、尖扎網(wǎng)頁設(shè)計(jì)、尖扎網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務(wù),打造尖扎網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供尖扎網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

按照題目要求寫出對應(yīng)的函數(shù)。

要求:寫一個函數(shù),傳入一個有若干個整數(shù)的列表,該列表中某個元素出現(xiàn)的次數(shù)超過了50%,返回這個元素。

def more_than_half(items):
   temp, times = None, 0
   for item in items:
       if times == 0:
           temp = item
           times += 1
       else:
           if item == temp:
               times += 1
           else:
               times -= 1
   return temp

點(diǎn)評:LeetCode上的題目,在Python面試中出現(xiàn)過,利用元素出現(xiàn)次數(shù)超過了50%這一特征,出現(xiàn)和temp相同的元素就將計(jì)數(shù)值加1,出現(xiàn)和temp不同的元素就將計(jì)數(shù)值減1。如果計(jì)數(shù)值為0,說明之前出現(xiàn)的元素已經(jīng)對最終的結(jié)果沒有影響,用temp記下當(dāng)前元素并將計(jì)數(shù)值置為1。最終,出現(xiàn)次數(shù)超過了50%的這個元素一定會被賦值給變量temp。

按照題目要求寫出對應(yīng)的函數(shù)。

要求:寫一個函數(shù),傳入的參數(shù)是一個列表(列表中的元素可能也是一個列表),返回該列表最大的嵌套深度。例如:列表[1, 2, 3]的嵌套深度為1,列表[[1], [2, [3]]]的嵌套深度為3。

def list_depth(items):
   if isinstance(items, list):
       max_depth = 1
       for item in items:
           max_depth = max(list_depth(item) + 1, max_depth)
       return max_depth
   return 0

點(diǎn)評:看到題目應(yīng)該能夠比較自然的想到使用遞歸的方式檢查列表中的每個元素。

按照題目要求寫出對應(yīng)的裝飾器。

要求:有一個通過網(wǎng)絡(luò)獲取數(shù)據(jù)的函數(shù)(可能會因?yàn)榫W(wǎng)絡(luò)原因出現(xiàn)異常),寫一個裝飾器讓這個函數(shù)在出現(xiàn)指定異常時可以重試指定的次數(shù),并在每次重試之前隨機(jī)延遲一段時間,最長延遲時間可以通過參數(shù)進(jìn)行控制。

方法一:

from functools 
import wraps
from random import random
from time import sleep def retry(*, retry_times=3, max_wait_secs=5, errors=(Exception, )):

   def decorate(func):

       @wraps(func)
       def wrapper(*args, **kwargs):
           for _ in range(retry_times):
               try:
                   return func(*args, **kwargs)
               except errors:
                   sleep(random() * max_wait_secs)
           return None

       return wrapper

   return decorate

方法二:

from functools import wraps
from random import random
from time import sleep class Retry(object):

   def __init__(self, *, retry_times=3, max_wait_secs=5, errors=(Exception, )):
       self.retry_times = retry_times
       self.max_wait_secs = max_wait_secs
       self.errors = errors

   def __call__(self, func):

       @wraps(func)
       def wrapper(*args, **kwargs):
           for _ in range(self.retry_times):
               try:
                   return func(*args, **kwargs)
               except self.errors:
                   sleep(random() * self.max_wait_secs)
           return None

       return wrapper

點(diǎn)評:我們不止一次強(qiáng)調(diào)過,裝飾器幾乎是Python面試必問內(nèi)容,這個題目比之前的題目稍微復(fù)雜一些,它需要的是一個參數(shù)化的裝飾器。

寫一個函數(shù)實(shí)現(xiàn)字符串反轉(zhuǎn),盡可能寫出你知道的所有方法。

點(diǎn)評:爛大街的題目,基本上算是送人頭的題目。

方法一:反向切片

def reverse_string(content):
   return content[::-1]

方法二:反轉(zhuǎn)拼接

def reverse_string(content):
   return ''.join(reversed(content))

方法三:遞歸調(diào)用

def reverse_string(content):
   if len(content) <= 1:
       return content
   return reverse_string(content[1:]) + content[0]

方法四:雙端隊(duì)列

from collections import deque

def reverse_string(content):
   q = deque()
   q.extendleft(content)
   return ''.join(q)

方法五:反向組裝

from io 
import StringIO

def reverse_string(content):
   buffer = StringIO()
   for i in range(len(content) - 1, -1, -1):
       buffer.write(content[i])
   return buffer.getvalue()

方法六:反轉(zhuǎn)拼接

def reverse_string(content):
   return ''.join([content[i] for i in range(len(content) - 1, -1, -1)])

方法七:半截交換

def reverse_string(content):
   length, content= len(content), list(content)
   for i in range(length // 2):
       content[i], content[length - 1 - i] = content[length - 1 - i], content[i]
   return ''.join(content)

方法八:對位交換

def reverse_string(content):
   length, content= len(content), list(content)
   for i, j in zip(range(length // 2), range(length - 1, length // 2 - 1, -1)):
       content[i], content[j] = content[j], content[i]
   return ''.join(content)

擴(kuò)展:這些方法其實(shí)都是大同小異的,面試的時候能夠給出幾種有代表性的就足夠了。給大家留一個思考題,上面這些方法,哪些做法的性能較好呢?我們之前提到過剖析代碼性能的方法,大家可以用這些方法來檢驗(yàn)下你給出的答案是否正確。

按照題目要求寫出對應(yīng)的函數(shù)。

要求:列表中有1000000個元素,取值范圍是[1000, 10000),設(shè)計(jì)一個函數(shù)找出列表中的重復(fù)元素。

def find_dup(items: list):
   dups = [0] * 9000
   for item in items:
       dups[item - 1000] += 1
   for idx, val in enumerate(dups):
       if val > 1:
           yield idx + 1000

感謝各位的閱讀,以上就是“怎么用Python寫裝飾器”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對怎么用Python寫裝飾器這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)頁標(biāo)題:怎么用Python寫裝飾器
URL分享:http://aaarwkj.com/article16/peehdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航電子商務(wù)、全網(wǎng)營銷推廣微信小程序、企業(yè)網(wǎng)站制作、網(wǎng)站維護(hù)

廣告

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

營銷型網(wǎng)站建設(shè)
免费国产污在线观看网站| 成人嚼牙特别黑黄怎么办| 三级日本午夜在线观看| 亚洲国产日韩精品自拍av| 日韩精品a区二区在线电影| 精品视频一区二区三区在线观看| 日韩精品少妇一区二区在线看| av资源中文字幕在线天堂| 黄色录像免费看中文字幕| 极品美女被插到高潮喷水| 久久久精品国产亚洲av色哟哟| 最新日韩欧美一区二区| 欧美一日韩一级片免费看| 东京成人热av男人的天堂| 传媒视频在线观看网站| 亚洲综合色日本日b网| 国产日韩欧美一区二区丝袜| 一区二区三区艳情播放| 国产精品久久午夜伦鲁鲁| 人妻的秘密一区二区三区| 日韩色图在线观看视频| 一区二区三区视频观看在线| 亚洲精品国产二区中文字幕| 国产av剧情精品亚洲| 亚洲最大五月六月丁香婷婷| 亚洲熟妇亚洲熟妇亚洲熟妇| 亚洲蜜桃精品一区二区三区| 国产成人激情自拍视频在线观看| 亚洲第一狼人天堂在线| 亚洲欧美日韩颜射极品| 91在线国产精品视频| 加勒比在线观看欧美一区| 人妻熟妇一区二区三区成人| 精品女同一区二区三区久久| 欧美亚洲伊人久久综合| 超碰97国产资源在线| 日韩中文字幕一二一二区| 青草草草草草在线观看| 中文精品字幕人妻熟女小妇| 国产男女猛进猛出精品91| 国产免费一区二区福利|