2013-03-19 51 views
1

我是新来的钩子,所以我需要一个建议。假设我有一个功能作为输入一些数据,并生成一个情节:如何编写钩子

def f(data, options): 
    plot = produce_plot(data) 
    apply_options(plot) # changing colors, style, ... 
    export(plot, option.format) 
    return plot 

这个功能不是由用户直接调用,但它被称为一个循环中,例如:

data_categories = divide_in_category(data) 
for d in data_categories: f(data, color=user_option.color, format='png') 

现在我想给用户提供这种情节的可能性,这取决于它的需要。假设用户想添加一个标签并做一些适合的操作,我认为一个好主意是提供一个钩子来访问函数f的内部。钩子应该在export函数之前执行。问题:怎么做?如何提供内部钩子内部的f

我不能处理所有无限usecases与options参数作为options.do_fitoptions.add_label ...

+0

如果有人搜索python钩子:http://stackoverflow.com/questions/774824/explain-python-entry-points#9615473 – guettli 2013-10-14 08:28:04

回答

0
def f(data, options, hook = None): 
    plot = produce_plot(data) 
    apply_options(plot) # changing colors, style, ... 
    if hook is not None: 
     plot = hook(plot) 
    export(plot, option.format) 
    return plot 

,然后用户可以调用F与他写了一个函数的名称,会做一些在剧情和返回一个新的情节。

+0

好吧,我也可以'数据'​​通过钩子,但我想知道如果我可以做得更好(对于例如前向兼容性),例如通过所有“本地人”或提供更复杂的界面。 – 2013-03-19 14:01:07