以下(简化)代码适用于FINE。简而言之:传递给我的函数的动态参数由装饰器而不是装饰的函数使用。但是我收到了这个令人讨厌的Pylint错误(“ 函数调用的位置参数太多”)。 我知道我可以在我的IDE /编辑器设置中禁用此错误(或使用pylint的内联禁用选项)。我也知道,还有其他解决方案会产生其他林特警告(例如:未使用的参数等)。
底线:如果我能一劳永逸地找出最“ Python式”的编写方式,而这不会使短毛猫感到沮丧,那将是很好的。
>def my_decorator(func):
''' dummy decorator '''
def wrapper(incoming_data):
if incoming_data['flag']:
# run the decorated function (NO ARGUMENTS needed):
return func()
# run some other code
return "I did something ELSE"
return wrapper
@my_decorator
def do_something():
''' dummy function '''
return "I ran the decorated function"
if __name__ == '__main__':
my_data_1 = dict(flag=True,
not_needed="useless_data")
result = do_something(my_data_1)
print(result) # "I ran the decorated function"
my_data_2 = dict(flag=False,
not_needed="useless_data")
result = do_something(my_data_2)
print(result) # "I did something ELSE"
答案 0 :(得分:0)
不是装饰do_something
来完成其他事情,而是将 wrapper 定义为主要功能(以下称为doer
),然后将适当的功能作为在需要时调用的参数。 do_something
可以是默认回调。
def do_something():
return "I'm the default callback"
def do_something_unexpected():
return "I'm another callback"
def doer(incoming_data, callback=do_something):
if incoming_data['flag']:
return callback()
return "I did something ELSE"
if __name__ == '__main__':
my_data_1 = dict(flag=True,
not_needed="useless_data")
result = doer(my_data_1) # Call
print(result) # "I ran the decorated function"
my_data_2 = dict(flag=False,
not_needed="useless_data")
result = doer(my_data_2, do_something_unexpected)
print(result) # "I did something ELSE"
答案 1 :(得分:0)
使用一个参数定义track_errors
,以匹配其用法。不需要装饰器。
do_something