189 8069 5689

python函数包装器 python函数的封装

推荐 8 个炫酷的 Python 装饰器

1、 lru_cache

创新互联是专业的资兴网站建设公司,资兴接单;提供成都网站设计、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行资兴网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

这个装饰器来自functools模块。该模块包含在标准库中,非常易于使用。它还包含比这个装饰器更酷的功能,但这个装饰器是非常受人喜欢的。此装饰器可用于使用缓存加速函数的连续运行。当然,这应该在使用时记住一些关于缓存的注意事项,但在通用使用情况下,大多数时候这个装饰器都是值得使用的。

2、JIT

JIT是即时编译的缩写。通常每当我们在Python中运行一些代码时,发生的第一件事就是编译。这种编译会产生一些开销,因为类型被分配了内存,并存储为未分配但已命名的别名,使用即时编译,我们在执行时才进行编译。

在很多方面,我们可以将其视为类似于并行计算的东西,其中Python解释器同时处理两件事以节省时间。Numba JTI编译器因将这一概念提到Python中而闻名,可以非常轻松地调用此装饰器,并立即提高代码的性能。Numba包提供了JIT装饰器,它使运行更密集的软件变得更加容易,而不必进入C。

3、do_twice

do_twice装饰器的功能与它的名字差不多。此装饰器可用于通过一次调用运行两次函数,对调试特别有用。它可以用于测量两个不同迭代的功能。

4、count_calls

count_calls装饰器可用于提供有关函数在软件中使用多少次的信息。与do_twice一样,对调试也特别有用。

5、dataclass

为了节省编写类的时间,推荐使用dataclass装饰器。这个装饰器可用于快速编写类中常见的标准方法,这些方法通常会在我们编写的类中找到。

6、singleton

singleton是一个单例装饰器。通常,单例装饰器是由用户自己编写的,实际上并不是导入的。

7、use_unit

在科学计算中经常派上用场的一种装饰器是use_unit装饰器。此装饰器可用于更改返回结果的表示单位。这对于那些不想在数据中添加度量单位但仍希望人们知道这些单位是什么的人很有用。这个装饰器可不是在任何模块中真正有用,但它是非常常见的,对科学应用程序非常有用。

Python 数据处理(三十九)—— groupby(过滤)

filter 方法可以返回原始对象的子集.

例如,我们想提取分组内的和大于 3 的所有分组的元素

filter 的参数必须是一个函数,函数参数是每个分组,并且返回 True 或 False

例如,提取元素个数大于 2 的分组

另外,我们也可以过滤掉不满足条件的组,而是返回一个类似索引对象。在这个对象中,没有通过的分组的元素被 NaN 填充

对于具有多列的 DataFrames ,过滤器应明确指定一列作为过滤条件

在进行聚合或转换时,你可能想对每个分组调用一个实例方法,例如

但是,如果需要传递额外的参数时,它会变得很冗长。我们可以直接使用分派到组对象上的方法

实际上这生成了一个函数包装器,在调用时,它接受所有传递的参数,并在每个分组上进行调用。

然后,这个结果可以和 agg 和 transform 结合在一起使用

在上面的例子中,我们按照年份分组,然后对每个分组中使用 fillna 补缺失值

nlargest 和 nsmallest 可以在 Series 类型的 groupby 上使用

对分组数据的某些操作可能并不适合聚合或转换。或者说,你可能只是想让 GroupBy 来推断如何合并结果

我们可以使用 apply 函数,例如

改变返回结果的维度

在 Series 上使用 apply 类似

对于之前的示例数据

假设,我们想按 A 分组并计算组内的标准差,但是 B 列的数据我们并不关心。

如果我们的函数不能应用于某些列,则会隐式的删除这些列,所以

直接计算标准差并不会报错

可以使用分类变量进行分组,分组的顺序会按照分类变量的顺序

可以使用 pd.Grouper 控制分组,对于如下数据

可以按照一定的频率对特定列进行分组,就像重抽样一样

可以分别对列或索引进行分组

类似于 Series 和 DataFrame ,可以使用 head 和 tail 获取分组前后几行

在 Series 或 DataFrame 中可以使用 nth() 来获取第 n 个元素,也可以用于获取每个分组的某一行

如果你要选择非空项,可以使用关键字参数 dropna ,如果是 DataFrame ,需要指定为 any 或 all (类似于 DataFrame.dropna(how='any|all') )

与其他方法一样,使用 as_index=False 分组名将不会作为索引

你也可以传入一个整数列表,一次性选取多行

使用 cumcount 方法,可以查看每行在分组中出现的顺序

可以使用 ngroup() 查看分组的顺序,该顺序与 cumcount 的顺序相反。

注意 :该顺序与迭代时的分组顺序一样,并不是第一次观测到的顺序

Python进阶精华-编写装饰器为被包装的函数添加参数

注意:这种发方法并不是装饰器最常用的功能,但是在降低代码重复上可谓是首屈一指。比如:如果不使用装饰器,上述代码可能会很多:

当然,这里也有一个潜在的风险,就是当装饰器包裹的函数已经用了debug作为参数名,那么装饰器这里将会报错,所以要添加额外的一些判断来完善代码:

最后还剩下一部分比较难理解的地方,我将理解的注释在每行代码上方,这个问题就是,在打印被修饰函数的参数签名时,其实并不能正确显示参数签名,原因是因为被wrapper修饰过后的函数实际上应该使用的是wrapper的参数签名表,例如:

所以,接下来,完成最后最难的一步:


文章题目:python函数包装器 python函数的封装
文章分享:http://cdxtjz.cn/article/dooggsh.html

其他资讯