Python Functools 偏函数
Functools 是 Python 中使用的标准框架,用于处理作用于或返回其他函数的高阶函数,它有助于扩展或使用这些函数而无需重写它们。 使用 Functools 使代码可读性强,维护方便,效率高。
该库包含两个主要功能:partial 和 partialmethod。 partialmethod 是已为特定参数定义的函数的不可调用方法描述符,并返回一个新的 partialmethod 描述符。
让我们看一下 partial() 函数。
在 Python 中使用 Functools partial() 函数
partial() 函数是一个高阶函数,它将一个函数作为输入并返回一个可以像其他函数一样在程序中使用的函数。 当有一个函数有很多参数,但我们每次使用该函数时只需要更改一个或两个参数,Functools 库附带的 partial() 函数可以在这种情况下提供帮助。
在 partial() 函数的帮助下,我们可以冻结函数中特定数量的参数,并创建一个新的简化参数来返回一个带有位置参数和关键字的新 partial() 对象。 因此,它阻止了我们重写原来的功能。
总的来说,partial() 是一个方便的工具,尤其是在将各种输入应用于单个对象或将函数的一个参数包装为常量时。 因此,使用 partial() 函数的最终结果将打印出优雅、可读且可重用的代码。
在使用 partial() 函数之前,我们必须从 Functools 库中导入它。 让我们看看我们是如何实现这个功能的。
from functools import partial
由于我们已经使用上面的代码导入了部分库,我们可以使用下面的部分命令。 然后我们可以根据需要调用 partial() 函数,它输出类似于定义函数的函数以及一个固定值。
下面是标准化的 partial() 函数及其属性。
partial(func, /, *args, **keywords)
部分函数由三个主要属性组成:函数、参数和关键字。
- partial.func (function name) - 可调用对象或返回父函数的名称和十六进制地址的函数。
- partial.args(位置参数)——该属性将预先分配的参数返回给 partial() 函数。
- partial.keyword(关键字参数)- 此属性将预先分配的关键字返回给 partial() 函数。
让我们使用 partial() 函数及其属性定义一个示例。
完整代码:
from functools import partial
#original function
def multiply(a,b):
return a*b
#partial function to multiply a as 2
multiplication1 = partial(multiply,2)
print(multiplication1(4))
#partial function to multiply b as 7
multiplication2 = partial(multiply, b=7)
print(multiplication2(3))
#simple multiply function with two variables
print(multiply(5,2))
#partial function with two values and multiply function
multiplication3 = partial(multiply,2,5)
print(multiplication3())
#defining some attributes in multiplication1, multiplication2 multiplication3
print('Function used in multiplication1 :', multiplication1.func)
print('Keywords for multiplication2 :', multiplication2.keywords)
print('Arguments for multiplication3 :', multiplication3.args)
输出:
首先,我们从 functools 中导入了 partial()
函数,并定义了一个名为 multiply()
的函数,其中包含两个变量 a 和 b。 此乘法函数将两个数字 (a,b) 相乘。
from functools import partial
def multiply(a,b):
return a*b
在下面的代码块中,partial() 函数被调用并输出一个函数对象 multiply() 和一个固定值 2。这里,partial() 函数调用 multiply() 并将 a 作为 2。
打印时,它为 b 分配 4 并将结果打印为 8。
multiplication1 = partial(multiply,2)
print(multiplication1(4))
这里,当 partial() 函数被调用时,它打印出 multiply() 函数和为 b 分配的值 3。它通过跳过原始函数的参数来指定变量 b 的值。
打印时,它已将 a 的值定义为 3,并将输出显示为 21。
multiplication2 = partial(multiply, b=7)
print(multiplication2(3))
当使用两个变量的值调用函数时,partial()
函数不是必需的。 像往常一样,a 取 5,b 取 2,打印结果为 10。
print(multiply(5,2))
由于原函数在调用 partial()
函数时有两个参数,所以不会有问题,multiply()
时a为2,b为5,然后显示结果为10。
multiplication3 = partial(multiply,2,5)
print(multiplication3())
下面的代码块分别显示函数 multiplication1 中使用的函数、multiplication2 中的关键字和 multiplication3 中的参数。 所以,multiplication1用到的函数是multiply(),它的十六进制值为000001E523A6E4C0。
在 multiplication2 中,我们使用 {'b': 7} 作为关键字,而 2, 5 是 multiplication3 中使用的参数。
print('Function used in multiplication1 :', multiplication1.func)
print('Keywords for multiplication2 :', multiplication2.keywords)
print('Arguments for multiplication3 :', multiplication3.args)
总结
本文讨论了 functools 库的 partial()
函数。 正如您在前面的示例中看到的,使用 partial()
函数使我们的代码更具可读性、优雅和快速。
如果您发现一个函数冻结一个或多个参数,那么 partial()
函数将最适合这种情况。
相关文章
Django 中的 Slug
发布时间:2023/05/04 浏览次数:173 分类:Python
-
本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。
在 Django 中按降序过滤查询集中的项目
发布时间:2023/05/04 浏览次数:157 分类:Python
-
在这个讲解中,学习如何借助 Django 中的 order_by() 方法按降序过滤出查询集中的项目。
Django ALLOWED_HOSTS 介绍
发布时间:2023/05/04 浏览次数:181 分类:Python
-
本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。
Django 中的 Select_related 方法
发布时间:2023/05/04 浏览次数:129 分类:Python
-
本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。
使用 Post 请求将数据发送到 Django 服务器
发布时间:2023/05/04 浏览次数:159 分类:Python
-
在这篇关于Django的讲解中,我们简要介绍了post和get请求以及如何在Django中用post实现CSRF token。
Django 返回 JSON
发布时间:2023/05/04 浏览次数:106 分类:Python
-
在与我们的讨论中,我们简要介绍了 JSON 格式,并讨论了如何借助 Django 中的 JsonResponse 类将数据返回为 JSON 格式。
在 Django 中创建对象
发布时间:2023/05/04 浏览次数:59 分类:Python
-
本文的目的是解释什么是模型以及如何使用 create() 方法创建对象,并了解如何在 Django 中使用 save() 方法。
在 Django 中为多项选择创建字段
发布时间:2023/05/04 浏览次数:75 分类:Python
-
在本文中,我们将着眼于为多项选择创建一个字段,并向您展示如何允许用户在 Django 中进行多项选择。