Python中的functools partial详解

Python中的functools partial详解

介绍

Python的标准库 functools 中的 partial 函数是一个非常有用的工具,他能够“部分完成”一个函数。该函数接收一个函数和一些参数,生成新的函数。这个新函数将保留原有函数的所有功能,但部分参数已经确定下来。假如你对一个函数的某个参数需要重复传入同样的值,这时候 partial 便可用。

语法

functools.partial 函数的语法非常简单:

functools.partial(func, *args, **keywords)

该函数接收两个参数:

  • func 是需要部分完成的函数;
  • *args 是可变参数,用来指定函数的一些初始参数;
  • **keywords 是关键字参数,用来指定函数的一些初始参数。

返回值是一个新的函数对象。

示例

以下是一个简单的示例,展示如何使用 partial 来部分完成一个函数:

from functools import partial

def greeting(name, message):
    print(f"{message}, {name}")

hello = partial(greeting, message="Hello")
hello("Jack")  # 输出:Hello, Jack

bye = partial(greeting, message="Goodbye")
bye("Mary")  # 输出:Goodbye, Mary

在上面示例中,我们从 functools 中导入 partial 函数。我们定义了一个最初接收两个参数的函数 greeting。然后我们定义了两个新函数: hellobye。这两个函数是通过 partial 来部分完成 greeting 函数的。

首先,我们使用 partial(greeting, message="Hello") 创建了一个新的函数 hello,其中 greeting 是需要部分应用的函数,message 是我们希望部分应用的参数。该函数接收一个新的参数 name,然后在屏幕上打印出 Hello, name

接下来,我们使用 partial(greeting, message="Goodbye") 创建了另一个新的函数 bye。它也是 greeting 函数的一个部分应用。不同的是,它的消息被设置为了 Goodbye

最后,我们分别在屏幕上打印出了两条信息: Hello, JackGoodbye, Mary。上述代码的输出结果如下:

Hello, Jack
Goodbye, Mary

更复杂的示例

下面是一个更复杂的示例,展示了如何使用 functools.partial 来在调用函数时忽略某个参数。该示例中我们使用了 requests 库来请求一个URL:

import requests
from functools import partial

def get(url, payload, headers):
    result = requests.get(url, params=payload, headers=headers)
    return result.status_code, result.text

google = partial(get, headers={'User-Agent': 'Mozilla/5.0'})
response = google("http://www.google.com", {'q': 'python'})
print(response)

在这个示例中,我们定义了一个函数 get,该函数接收三个参数:urlpayloadheaders。然后我们使用 partial 函数来部分完成 get 函数,为 headers 指定了一个值。这样,在我们调用 google 函数时,便不需要指定 headers 参数了,同时因为 urlpayload 并未被设置,我们仍然需要通过参数指定它们的值。

然后,我们使用这个 google 函数发送了一个 GET 请求,并打印出了服务器的响应状态码和数据内容。上面的代码会输出以下内容:

(200, '<!doctype html> ...')

从上面的输出可以看到,我们成功通过 requests 库发送了一个请求,而不需要在每次调用时指定 User-Agent。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中的functools partial详解 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python多线程共享变量的使用和效率方法

    关于“python多线程共享变量的使用和效率方法”的完整攻略,我们可以分为以下几个方面进行讲解: 1. 多线程共享变量的基本概念 在Python多线程编程中,当多个线程同时访问同一个变量时,就需要考虑多线程共享变量的问题。多线程共享变量是一个非常重要的问题,因为不正确的共享变量会导致程序出现竞态条件,从而导致程序出现不可预料的错误。 多线程共享变量的基本概念…

    python 2023年5月18日
    00
  • Python selenium 自动化脚本打包成一个exe文件(推荐)

    Python selenium 是一个强大的自动化测试工具,可以帮助开发人员快速构建高效的脚本,提高项目的质量和效率。但是在实际应用中,需要将脚本打包成一个exe文件,以便在其他机器上运行,本文主要介绍如何实现 Python selenium 自动化脚本打包成一个 exe 文件的操作方法。 环境准备 安装 Python2.7 或 Python3.6 安装 P…

    python 2023年6月6日
    00
  • 如何在Python对Excel进行读取

    让我来为您详细讲解“如何在Python对Excel进行读取”的完整实例教程。 什么是Excel Excel 是微软公司推出的一款办公软件,主要用于表格处理、数据分析等操作。它最早是在 Windows 操作系统中诞生的,但是随着软件开发技术的不断发展,现在已经可以在 Linux 和 macOS 等操作系统中使用了。 Python 读取 Excel 的准备工作 …

    python 2023年5月13日
    00
  • 详解Python中DOM方法的动态性

    给出“详解Python中DOM方法的动态性”的攻略如下: 1. 什么是DOM? DOM(Document Object Model)是一种文档对象模型,它是一种以树形结构作为基础的文档表示方法,可以用JavaScript或Python等编程语言来操作HTML或XML文档的内容和结构。 2. 动态性的含义 在Python中,DOM方法是动态的,这意味着当我们对…

    python 2023年6月3日
    00
  • python如何压缩新文件到已有ZIP文件

    要将新文件添加到已有的ZIP文件中,可以使用Python的内置模块zipfile。下面是具体的实现步骤: 1. 打开已有的ZIP文件 首先需要打开已有的ZIP文件,可以使用zipfile.ZipFile来打开文件,并将其赋值给一个变量。可以使用以下代码打开一个名为example.zip的ZIP文件: import zipfile zip_file = zip…

    python 2023年6月3日
    00
  • Python使用grequests并发发送请求的示例

    以下是关于“Python使用grequests并发发送请求的示例”的完整攻略: Python使用grequests并发发送请求的示例 在Python中,我们可以使用grequests模块实现并发发送请求。grequests是requests模块的异步版本,可以实现高效的并发请求。以下是Python使用grequests并发发送请求的示例。 安装greques…

    python 2023年5月15日
    00
  • Python3读取文件的操作详解

    Python3读取文件的操作详解 在Python中,读取文件是很常见的操作,本文将详细讲解如何在Python中读取文件。 打开文件 在Python中,打开文件需要使用到Python内置的open()函数。该函数有两个参数:文件名和模式。文件名可以是相对路径或绝对路径,模式用于指定文件打开后的读写模式。常见的文件打开模式如下: ‘r’:只读模式,文件指针位于文…

    python 2023年6月3日
    00
  • Python列表删除元素del、pop()和remove()的区别小结

    Python列表删除元素del、pop()和remove()的区别小结 在Python中,列表是一种常见的数据类型,它允许我们存储多个值。在使用列表时,我们经常需要删除其中的元素。Python提供了三种方法来删除列表中的元素:del、pop()和remove()。本攻略将详细讲解这三种方法的区别。 del del是Python中的一个关键字,可以用来删除列表…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部