python进阶Python 进阶(一些技巧)

财经频道 2020-05-18169未知admin

  Note 2:与 Java 相同,with 支持同时管理多个资源,因此可以直接写

  对于简单的 with 资源管理,编写一个类可能会显得比较繁琐,为此 contextlib 提供了一个方便的装饰器@contextlib.contextnager用来简化代码。

  用于将原本不支持 with 管理的资源,包装成一个 Context 对象。

  提供了 OS 无关的文件径抽象,可以完全替代os.path和glob.

  pathlib 也提供了 glob 支持,也就是广泛用在径匹配上的一种简化正则表达式。

  glob 中的 * 表示任意字符,而 ** 则表示任意层目录。(在大型文件树上使用 ** 速度会很慢!)

  如果不用 wraps 的话,因为实际上返回的是 wrapper,被装饰对象的这些文档属性都会丢失。(比如 docstring)

  因此在使用 wrapper 装饰器时,添加 @wraps() 装饰器是个好习惯。python进阶

  这个感觉和高等数学的偏函数很像:比如函数 z = f(x, y) 有 x 和 y 两个变量,现在把 x 看作,就可以对 y 进行求导运算。

  而 python 的 partial 也差不多,不过它不是把 x 看作,而是先给定 x 的值。用法如下:

  如果某方法可能被频繁调用(使用相同的参数),而且它的结果在一定时间内不会改变。可以用 lru_cache 装饰它,减少运算量或 IO 操作。

  比如用递归计算斐波那契数列,数值较低的参数会被频繁使用,于是可以用 lru_cache 来缓存它们。

  或者爬取网页,可能会需要频繁爬取一个变化不快的网页,这时完全可以用 cache 缓存。

  但是它不能控制缓存失效时间,python进阶因此不能用于 Web 系统的缓存。还是得自己写个简单的装饰器,把缓存存到 redis 里并设置 expires。或者直接用 Flask 或 Django 的 caching 插件。

  画外:有单重派发,自然就有多重派发,Julia 语言就支持多重派发,即根据函数所有参数的类型,来决定调用哪一个同名函数。

  Julia 语言根本没有类这个定义,类型的所有方法都是通过多重派发来定义的。

  可用于动态获取对象的属性,与直接用getattr()不同的是,它可以嵌套访问属性。

  可用于调用函数,python进阶它和 attrgetter 很像,差别在于 attrgetter 只是返回指定的属性,而 methodcaller 会直接把指定的属性当成函数调用,然后返回结果。

  方法很多,基本不可能一次全记住。还是要用到时多查吧。大致记住有提供哪些功能,需要用到时能想起可以查这个模块就行。

原文标题:python进阶Python 进阶(一些技巧) 网址:http://www.dzine-studios.com/caijingpindao/2020/0518/48513.html

Copyright © 2002-2020 志同道合新闻网 www.dzine-studios.com 版权所有  

联系QQ:1352848661