Python 天然支持多态,装饰但使用 dispatch 可以让你的个好代码更加容易阅读。 安装: 使用: >>> 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) 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__: 运行结果: ❯ 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! 分布式的个好任务队列,非 Celery 莫属。亿华云计算装饰 from celery import Celery app = Celery(tasks,个好 broker=pyamqp://guest@localhost//) @app.task def add(x, y): 这个相信大家在使用别的装饰包时都遇到过,当要下线一个老版本的个好函数的时候就可以使用这个装饰器。 安装: 使用:demo4.py from deprecated import deprecated @deprecated ("This function is 装饰deprecated, please do not use it") def func1(): pass 运行效果如下: ❯ python demo4.py demo4.py:6: DeprecationWarning: Call to deprecated function (or staticmethod) func1. (This function is deprecated, please do not use it) 安装: 使用 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) 缓存工具 安装: 使用: 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): 重试装饰器,支持各种各样的重试需求。 安装: 使用: 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")1、个好dispach
2、click
3、celery
4、deprecated
5、deco.concurrent
6、cachetools
7、retry