1、dispach
Python 天然支持多態,但使用 dispatch 可以讓你的代碼更加容易閱讀。
安裝:
pipinstallmultipledispatch
使用:
>>> 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 可以很方便地讓你實現命令行工具。
安裝:
pipinstallclick
使用: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 莫屬。
from celery import Celery
app = Celery('tasks', broker='pyamqp://guest@localhost//')
@app.task
def add(x, y):
return x + y
4、deprecated
這個相信大家在使用別的包時都遇到過,當要下線一個老版本的函數的時候就可以使用這個裝飾器。
安裝:
pipinstallDeprecated
使用: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
安裝:
pipinstalldeco
使用 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 results
6、cachetools
緩存工具
安裝:
pipinstallcachetools
使用:
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
重試裝飾器,支持各種各樣的重試需求。
安裝:
pipinstalltenacity
使用:
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
審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
代碼
+關注
關注
30文章
4780瀏覽量
68527 -
python
+關注
關注
56文章
4792瀏覽量
84630
發布評論請先 登錄
相關推薦
python學習:三個測試庫的裝飾器實現思路
在 Python 中實現參數化測試的幾個庫,并留下一個問題: 它們是如何做到把一個方法變成多個方法,并且將每個方法與相應的參數綁定起來的呢? 我們再提煉一下,原問題等于是:在一個類中,
理解Python裝飾器及其工作原理
Python 是一種對新手很友好的語言。但是,它也有很多較難掌握的高級功能,比如裝飾器(decorator)。很多初學者一直不理解裝飾器及其
發表于 10-08 11:39
?2210次閱讀
分享python 7個好用的裝飾器
): return x + y4、deprecated這個相信大家在使用別的包時都遇到過,當要下線一個老版本的函數的時候就可以使用這個裝飾器。安裝:pip install Deprecated
發表于 06-15 16:54
一文讀懂Python裝飾器
談裝飾器前,還要先要明白一件事,Python 中的函數和 Java、C++不太一樣,Python 中的函數可以像普通變量一樣當做參數傳遞給另外一個
發表于 04-28 10:48
?3427次閱讀
Python:裝飾器的原理和案例
Python中的裝飾器用于擴展可調用對象的功能,而無需修改其結構。基本上,裝飾器函數包裝另一個函數以增強或修改其行為。我們可以通過一
8 個好用的VS Code Python 擴展
今天為大家分享 8 個好用的 VS Code Python 擴展。 1. Python extension for Visual Studio Code 這個擴展是由微軟官方提供的,支
Python自制簡單實用的日志裝飾器
在寫代碼的時候,往往會漏掉日志這個關鍵因素,導致功能在使用的時候出錯卻無法溯源。 其實,只需要寫一個非常簡單的日志裝飾器,我們就能大大提升排查問題的效率。 1.簡陋版裝飾
Python 自制簡單實用的日志裝飾器
在寫代碼的時候,往往會漏掉日志這個關鍵因素,導致功能在使用的時候出錯卻無法溯源。 其實,只需要寫一個非常簡單的日志裝飾器,我們就能大大提升排查問題的效率。 1.簡陋版裝飾
如何寫一個簡單的裝飾器
今天介紹的是一個已經存在十三年,但是依舊不紅的庫 decorator,好像很少有人知道他的存在一樣。 這個庫可以幫你做什么呢 ? 其實很簡單,就是可以幫你更方便地寫python裝飾器代
【每天學點AI】一個例子帶你了解Python裝飾器到底在干嘛!
進行“加料”呢?Python裝飾器提供了一個更為優雅的方式來增強現有函數的行為,并且不需要修改現有的函數代碼及調用方式。接下來通過一個案例來
評論