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
。然后我们定义了两个新函数: hello
和 bye
。这两个函数是通过 partial
来部分完成 greeting
函数的。
首先,我们使用 partial(greeting, message="Hello")
创建了一个新的函数 hello
,其中 greeting
是需要部分应用的函数,message
是我们希望部分应用的参数。该函数接收一个新的参数 name
,然后在屏幕上打印出 Hello, name
。
接下来,我们使用 partial(greeting, message="Goodbye")
创建了另一个新的函数 bye
。它也是 greeting
函数的一个部分应用。不同的是,它的消息被设置为了 Goodbye
。
最后,我们分别在屏幕上打印出了两条信息: Hello, Jack
和 Goodbye, 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
,该函数接收三个参数:url
,payload
和 headers
。然后我们使用 partial
函数来部分完成 get
函数,为 headers
指定了一个值。这样,在我们调用 google
函数时,便不需要指定 headers
参数了,同时因为 url
和 payload
并未被设置,我们仍然需要通过参数指定它们的值。
然后,我们使用这个 google
函数发送了一个 GET 请求,并打印出了服务器的响应状态码和数据内容。上面的代码会输出以下内容:
(200, '<!doctype html> ...')
从上面的输出可以看到,我们成功通过 requests 库发送了一个请求,而不需要在每次调用时指定 User-Agent。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中的functools partial详解 - Python技术站