部分功能的真实世界的例子

时间:2012-01-12 12:18:03

标签: python function lambda functional-programming currying

我一直在使用Python的partial功能。我发现它很有趣,但如果我能用一些真实的例子来理解它,而不是将它理解为另一种语言特征,那将会很有帮助。

3 个答案:

答案 0 :(得分:11)

我经常使用的一种方法是打印到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 ')

答案 1 :(得分:6)

另一个例子是,例如,当编写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()

答案 2 :(得分:-1)

在这里查看我的问题:Does python have a built-in function for interleaving generators/sequences?

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)。