当前位置:网站首页>七个好用的装饰器
七个好用的装饰器
2022-06-11 04:03:00 【somenzz】
分享七个好用的装饰器,方便你撸代码。
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=joih
Hello joih!
Hello joih!
Hello joih!
* python demo2.py --count=3
Your name: somenzz
Hello somenzz!
Hello somenzz!
Hello somenzz!3、celery
分布式的任务队列,非 Celery 莫属。
Celery 介绍和详细用法,可以参考前文:
开发环境下,如何通过一个命令让 fastapi 和 celery 一起工作
from celery import Celery
app = Celery('tasks', broker='pyamqp://[email protected]//')
@app.task
def add(x, y):
return x + y4、deprecated
这个相信大家在使用别的包时都遇到过,当要下线一个老版本的函数的时候就可以使用这个装饰器。
安装:
pip install Deprecated使用:demo4.py
from deprecated import deprecated
@deprecated ("This function is deprecated, please do not use it")
def func1():
pass
func1()运行效果如下:
* 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 程序中查找或创建两个函数一样简单。我们可以用 @concurrent 装饰需要并行运行的函数,用 @synchronized 装饰调用并行函数的函数,使用举例:
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 results6、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(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最后
本文分享了七个好用的装饰器,希望对你写代码有所帮助。

边栏推荐
- 邪恶的CSRF
- Large factory outsourcing or self research company? How to choose a job for a tester?
- SQL injection correlation analysis
- golang泛型:generics
- Vulkan-官方示例解读-RayTracingShadows&在这里边使用模型(1)
- Embedded basic interface-i2s
- A - Eddy's AC puzzle (C language)
- Unity prefab scene conflict merge tool unityyamlmerge
- Esp32 development -lvgl animation display
- 2022 love analysis · privacy computing vendor panoramic report | love Analysis Report
猜你喜欢
随机推荐
Market prospect analysis and Research Report of seed laser in 2022
Esp32 gattc configuration UUID
如何做编程知识投资及减少知识失效的影响
Composition and configuration of GPS Beidou clock synchronization (satellite time synchronization system) in power plant
clickjacking漏洞的挖掘与利用
Linq. pdf
Protection and bypass of repeated contracting
未來已來,5G-Advanced時代開啟
2022 年 5 月产品大事记
未来已来,5G-Advanced时代开启
[signalr complete series] Net6 Zhongshi signalr communication
Unity prefab scene 冲突合并工具 UnityYAMLMerge
Embedded basic interface -spi
Docker builds a redis Cluster - three machines, three masters and three slaves
Programming battle -- challenging college entrance examination questions
ESP series module burning firmware
Safe and borderless, Guanghe tongdai 5g module +ai intelligent security solution shines at CPSE Expo
[network] socket programming
基于FPGA的一维卷积神经网络CNN的实现(五)数据量化(附代码)
Host computer development (how to develop host computer)








![[network] socket programming](/img/df/2afc300bfc2dd319247a4b75ef7e2c.png)