【发布时间】:2016-11-18 01:36:02
【问题描述】:
我需要多次调用一个多参数函数,而除了一个参数之外的所有参数都是固定的。我正在考虑使用装饰器:
# V1 - with @decorator
def dec_adder(num):
def wrap(fun):
def wrapped_fun(n1):
return fun(n1, second_num=num)
return wrapped_fun
return wrap
@dec_adder(2)
def adder(first_num, second_num):
return first_num + second_num
print adder(5)
>>> 7
但这似乎令人困惑,因为它似乎调用了一个只有一个参数的 2 参数函数 adder。
另一种方法是使用嵌套函数定义,该函数使用来自父函数的局部变量:
# V2 - without @decorator
def add_wrapper(num):
def wrapped_adder(num_2):
return num + num_2
return wrapped_adder
adder = add_wrapper(2)
print adder(5)
>>> 7
但我对使用这种方法犹豫不决,因为在我的实际实现中,包装函数非常复杂。我的直觉是它应该有一个独立的定义。
如果这冒险进入意见领域,请原谅我,但是这两种方法是否被认为是更好的设计和/或更 Pythonic?我应该考虑其他一些方法吗?
【问题讨论】:
标签: python decorator python-decorators