部分函数的实际案例

4 投票
3 回答
4238 浏览
提问于 2025-04-17 10:05

我最近在研究Python中的partial函数。觉得这个功能挺有意思的,但如果能通过一些实际的例子来理解它,而不是单纯把它当成一种语言特性来学习,那就更好了。

3 个回答

-1

看看我在这里的问题:Python有没有内置函数可以交错生成器/序列?

from itertools import *
from functional import *

compose_mult = partial(reduce, compose)
leaf = compose_mult((partial(imap, next), cycle, partial(imap, chain), lambda *args: args))

你会看到我使用了部分应用的方式,创建了只需要一个参数的函数,这些函数可以传递给迭代器函数(比如map和reduce)。

7

另一个例子是,在写Tkinter代码时,比如说,要给回调函数添加一个标识数据,因为Tkinter的回调函数是没有参数的。

所以,假设我想创建一个数字键盘,并且想知道哪个按钮被按下了:

import Tkinter
from functools import partial

window = Tkinter.Tk()
contents = Tkinter.Variable(window)
display = Tkinter.Entry(window, textvariable=contents)

display.pack()

def clicked(digit):
    contents.set(contents.get() + str(digit))

counter = 0

for i, number in enumerate("7894561230"):
    if not i % 3:
        frame = Tkinter.Frame(window)
        frame.pack()
    button = Tkinter.Button(frame, text=number, command=partial(clicked, number))
    button.pack(side="left", fill="x")

Tkinter.mainloop()
12

我常用的一个方法是把信息打印到 stderr,而不是默认的 stdout

from __future__ import print_function
import sys
from functools import partial

print_stderr = partial(print, file=sys.stderr)
print_stderr('Help! Little Timmy is stuck down the well!')

你可以把这个和 print 函数接受的其他参数一起使用:

print_stderr('Egg', 'chips', 'beans', sep=' and ')

撰写回答