七个好用的装饰器

网友投稿 228 2022-09-25

七个好用的装饰器

分享七个好用的装饰器,方便你撸代码。

1、dispach

Python 天然支持多态,但使用 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(1, 2)3>>> add(1, 'hello')'1 + hello'

2、click

click 可以很方便地让你实现命令行工具。

安装:

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()

运行结果:

❯ python demo2.py --count=3 --name=joihHello joih!Hello joih!Hello joih!❯ python demo2.py --count=3Your name: somenzzHello somenzz!Hello somenzz!Hello somenzz!

3、celery

分布式的任务队列,非 Celery 莫属。

Celery 介绍和详细用法,可以参考前文:

​​开发环境下,如何通过一个命令让 fastapi 和 celery 一起工作​​

​​一文搞定 celery 任务远程调用​​

from celery import Celeryapp = Celery('tasks', broker='pyamqp://guest@localhost//')@app.taskdef add(x, y): return x + y

4、deprecated

这个相信大家在使用别的包时都遇到过,当要下线一个老版本的函数的时候就可以使用这个装饰器。

安装:

pip install Deprecated

使用:demo4.py

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

运行效果如下:

❯ python demo4.pydemo4.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 程序中查找或创建两个函数一样简单。我们可以用 @concurrent 装饰需要并行运行的函数,用 @synchronized 装饰调用并行函数的函数,使用举例:

from deco import concurrent, synchronized @concurrent # We add this for the concurrent functiondef 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 functiondef 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 = '% 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 randomfrom tenacity import retry@retrydef do_something_unreliable(): if random.randint(0, 10) > 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

最后

本文分享了七个好用的装饰器,希望对你写代码有所帮助。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:300美元关口,郭台铭突然卖掉阿里巴巴,释放什么信号?
下一篇:[区块链笔记12] 第一个DApp--demo
相关文章

 发表评论

暂时没有评论,来抢沙发吧~