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利用plotly绘制正二十面体详解

    下面是Python利用plotly绘制正二十面体的完整攻略: 一、准备工作 安装必要的库: pip install plotly pip install numpy 导入所需库: import plotly.graph_objs as go import plotly.offline as pyo import numpy as np 二、绘制正二十面体 首…

    python 2023年6月3日
    00
  • Python 的 f-string 可以连接字符串与数字的原因解析

    标题:Python 的 f-string 可以连接字符串与数字的原因解析 F-string 是 Python3.6 中的一种字符串格式化方法,对于连接字符串和数字非常方便,以下是详细讲解。 知识背景 在 Python 中,字符串格式化可以使用相对简单的方法,例如使用 % 格式化字符串或使用 format() 方法。但是,自 Python 3.6 起,更简单,…

    python 2023年6月5日
    00
  • Python3爬虫mitmproxy的安装步骤

    下面是“Python3爬虫mitmproxy的安装步骤”的完整攻略。 必备条件 在开始安装mitmproxy之前,需要先满足以下条件: Ubuntu或其他Linux发行版 已经安装了Python3 已经安装了pip工具 安装步骤 以下是安装mitmproxy的步骤: 安装mitmproxy: shell pip3 install mitmproxy 这将下载…

    python 2023年5月14日
    00
  • python实现带界面的井字棋小游戏

    下面我将详细讲解“Python实现带界面的井字棋小游戏”的完整攻略。该游戏的实现需要用到Python的Tkinter库,所以需要先安装Python及Tkinter库。以下是具体步骤: 首先,需要导入Tkinter库,用于创建GUI界面。 from tkinter import * 创建一个窗口,并设置窗口的大小和标题: window = Tk() windo…

    python 2023年5月19日
    00
  • python+selenium实现简历自动刷新的示例代码

    下面我将详细讲解如何使用Python和Selenium实现简历自动刷新的示例代码。 简介 在现代职场中,简历刷新是非常重要的一项工作。然而,如果你有多个简历需要管理,那么手动刷新会非常浪费时间。因此,使用Python和Selenium实现简历自动刷新是一个非常好的解决方案。 环境搭建 在开始使用Python+Selenium实现简历自动刷新之前,需要先安装P…

    python 2023年5月19日
    00
  • 如何使用python中的networkx来生成一个图

    生成图是图论中常见问题之一,而Python中的networkx是一个成熟的图论分析工具包,使得生成和绘制图非常方便。以下是使用Python中的networkx来生成图的完整攻略。 安装networkx 在使用networkx之前,需要安装这个Python软件包。可以使用以下命令来安装: pip install networkx 创建图 使用networkx创…

    python 2023年5月18日
    00
  • 详解如何在PyCharm控制台中输出彩色文字和背景

    下面是详解如何在PyCharm控制台中输出彩色文字和背景的攻略。 1. 什么是彩色文字和背景输出 在PyCharm控制台中,我们可以控制输出文字的颜色和背景,以使得输出更具可读性。例如,在Linux终端中,我们可以使用ANSI转义序列实现彩色输出。 2. 使用ANSI转义序列实现彩色文字和背景输出 ANSI转义序列是一种控制终端输出格式的标准方式,它借助不同…

    python 2023年5月20日
    00
  • Python 字典与字符串的互转实例

    Python字典与字符串的互转实例 本文将介绍如何在Python中实现字典和字符串的互相转换,可以帮助我们在处理数据的时候更加高效和方便。 1. 将字典转换为字符串 将字典转换为字符串的常用方法是使用json.dumps()或str()函数。这两种方法的区别在于json.dumps()方法可以将字典中的特殊类型,如datetime对象,转换为可序列化的字符串…

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