部分函数的实际案例
我最近在研究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 ')