Python实战魔法系列(一)我们知道,任何语言都有其独特的黑魔法,或深层次的语言特性,或赏心悦目的语法糖,有些不适合做业务代码和普通脚本,比如元编程等,但有还有一些简单实用的魔法,可以让短暂的生命变得更短一些。在本次分享记录中,defaultdict是一个很常用的字典,有默认值。它对于统计计数??非常有用。其实用匿名函数处理多层数据更方便,比如从集合中按城市统计名字的个数importdefaultdictcounts=defaultdict(lambda:defaultdict(0))forcity,nameinpeples:counts[city][name]+=1contextlib我们知道with关键字是python和不同语法糖之一。正确使用可以使代码简洁明了。其中,官方库contextlib包下有很多带有控制块的实用工具。使用后,您将无法返回。举几个例子,运行:suppress这是官方的解释:Contextmanagertosuppressspecifiedexceptions。使用场景非常普遍。比如我们需要处理一堆产品,但是可能会出现一些未知的异常,可能会中途挂掉。除了再次运行修复之外,我们还可以使用下面的代码:forproductinproducts:withcontextlib.suppress(Exception):handle(i)contextmanagercontextmanager提供了一个简单的创建上下文管理器的方法,就拿上面的例子来说,直接使用官方的suppress可以让我们遍历所有的商品,但是这个方法会隐藏所有的异常。很可能90%的商品加工过程都有异常,只是我们未必知道。这时候我们可以自定义我们的suppress来捕获异常并输出:fromcontextlibimportcontextmanager@contextmanagerdefmysuppress():try:print("contextstart")yieldexceptExceptionase:loger.exception(e)finally:除了for循环代码,print("contextend")还可以用在业务流程中,比如在我们的suppress中包装一个不太重要但容易出错的步骤,让我们的代码更加健壮
