Keeping function call signatures consistent for a function that accepts a superset of another function's arguments
我有一个函数(
1 2 3 4 5 6 7 | def bar(bar_arg, bar_kw=None): #do some stuff return ret def foo(bar_arg, foo_arg, bar_kw=None, foo_kw=None): ret = bar(bar_arg, bar_kw) ret.some_method(foo_arg, foo_kw=foo_kw) |
我希望
有没有办法根据
注意,我知道* args和** kwargs。但是,它们使函数签名不明确,并且不会通知用户允许哪些参数和关键字参数。
编辑:我应该注意我的用例比这个例子复杂得多。被调用的外部函数(
由于
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from matplotlib import pyplot import matplotlib as mpl def bar(f): def wrapper(*args, **kwargs): # Change args, kwargs for calling foo() f(*new_args,**new_kwargs) return return wrapper @bar def foo(*new_args, **new_kwargs): return mpl.colorbar.ColorbarBase(*new_args, **new_kwargs) |
例如,以下命令将
1 2 3 4 5 6 7 8 9 | fig = pyplot.figure(figsize=(8, 3)) ax1 = fig.add_axes([0.05, 0.80, 0.9, 0.15]) cmap = mpl.cm.cool norm = mpl.colors.Normalize(vmin=5, vmax=10) ret = foo(ax1, cmap=cmap, norm=norm, orientation='horizontal') |
我认为最好的选择是忽略
如果您的实际功能比他们在问题中看起来更复杂,那么请更新问题以显示该问题。现在,程序员只需编写即可明确而明确
1 2 | my_bar = bar(bar_arg, bar_kw) my_bar.some_method(foo_arg, foo_kw=foo_kw) |
为了自己。任何读者都知道发生了什么,并且不必解析长参数列表,额外的代码行也没问题。