<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          七個(gè)好用的裝飾器

          共 5468字,需瀏覽 11分鐘

           ·

          2022-06-13 19:20

          分享七個(gè)好用的裝飾器,方便你擼代碼。

          1、dispach

          Python 天然支持多態(tài),但使用 dispatch 可以讓你的代碼更加容易閱讀。

          安裝:

          pip install multipledispatch

          使用:

          >>> from multipledispatch import dispatch

          >>> @dispatch(int, int)
          ... def add(x, y):
          ...     return x + y

          >>> @dispatch(object, object)
          ... def add(x, y):
          ...     return "%s + %s" % (x, y)

          >>> add(12)
          3

          >>> add(1'hello')
          '1 + hello'

          2、click

          click 可以很方便地讓你實(shí)現(xiàn)命令行工具。

          安裝:

          pip install click

          使用:demo2.py :

          import click

          @click.command()
          @click.option('--count', default=1, help='Number of greetings.')
          @click.option('--name', prompt='Your name',
                        help='The person to greet.')
          def hello(count, name):
              """Simple program that greets NAME for a total of COUNT times."""
              for x in range(count):
                  click.echo(f"Hello {name}!")

          if __name__ == '__main__':
              hello()

          運(yùn)行結(jié)果:

          ? python demo2.py --count=3 --name=joih
          Hello joih!
          Hello joih!
          Hello joih!
          ? python demo2.py --count=3
          Your name: somenzz
          Hello somenzz!
          Hello somenzz!
          Hello somenzz!

          3、celery

          分布式的任務(wù)隊(duì)列,非 Celery 莫屬。

          Celery 介紹和詳細(xì)用法,可以參考前文:

          開(kāi)發(fā)環(huán)境下,如何通過(guò)一個(gè)命令讓 fastapi 和 celery 一起工作

          一文搞定 celery 任務(wù)遠(yuǎn)程調(diào)用

          from celery import Celery

          app = Celery('tasks', broker='pyamqp://guest@localhost//')

          @app.task
          def add(x, y):
              return x + y

          4、deprecated

          這個(gè)相信大家在使用別的包時(shí)都遇到過(guò),當(dāng)要下線(xiàn)一個(gè)老版本的函數(shù)的時(shí)候就可以使用這個(gè)裝飾器。

          安裝:

          pip install Deprecated

          使用:demo4.py

          from deprecated import deprecated
          @deprecated ("This function is deprecated, please do not use it")
          def func1():
              pass

          func1()

          運(yùn)行效果如下:

          ? python demo4.py
          demo4.py:6: DeprecationWarning: Call to deprecated function (or staticmethod) func1. (This function is deprecated, please do not use it)
            func1()

          5、deco.concurrent

          安裝:

          pip install deco

          使用 DECO 就像在 Python 程序中查找或創(chuàng)建兩個(gè)函數(shù)一樣簡(jiǎn)單。我們可以用 @concurrent 裝飾需要并行運(yùn)行的函數(shù),用 @synchronized 裝飾調(diào)用并行函數(shù)的函數(shù),使用舉例:

          from deco import concurrent, synchronized 
          @concurrent # We add this for the concurrent function
          def process_url(url, data):
            #Does some work which takes a while
            return result

          @synchronized # And we add this for the function which calls the concurrent function
          def process_data_set(data):
            results = {}
            for url in urls:
              results[url] = process_url(url, data)
            return results

          6、cachetools

          緩存工具

          安裝:

          pip install cachetools

          使用:

          from cachetools import cached, LRUCache, TTLCache

          # speed up calculating Fibonacci numbers with dynamic programming
          @cached(cache={})
          def fib(n):
              return n if n < 2 else fib(n - 1) + fib(n - 2)

          # cache least recently used Python Enhancement Proposals
          @cached(cache=LRUCache(maxsize=32))
          def get_pep(num):
              url = 'http://www.python.org/dev/peps/pep-%04d/' % num
              with urllib.request.urlopen(url) as s:
                  return s.read()

          # cache weather data for no longer than ten minutes
          @cached(cache=TTLCache(maxsize=1024, ttl=600))
          def get_weather(place):
              return owm.weather_at_place(place).get_weather()

          7、retry

          重試裝飾器,支持各種各樣的重試需求。

          安裝:

          pip install tenacity

          使用:

          import random
          from tenacity import retry

          @retry
          def do_something_unreliable():
              if random.randint(010) > 1:
                  raise IOError("Broken sauce, everything is hosed!!!111one")
              else:
                  return "Awesome sauce!"

          @retry(stop=stop_after_attempt(7))
          def stop_after_7_attempts():
              print("Stopping after 7 attempts")
              raise Exception


          @retry(stop=stop_after_delay(10))
          def stop_after_10_s():
              print("Stopping after 10 seconds")
              raise Exception

          @retry(stop=(stop_after_delay(10) | stop_after_attempt(5)))
          def stop_after_10_s_or_5_retries():
              print("Stopping after 10 seconds or 5 retries")
              raise Exception

          最后

          本文分享了七個(gè)好用的裝飾器,希望對(duì)你寫(xiě)代碼有所幫助。


          瀏覽 24
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本亚洲黄 | 草逼123 | 婷婷激情在线视频 | 国产肥胖老太性HD | 中文字幕无码在线视频 |