在Python中使用函数作为参数编写重试机制

2024-04-20 12:27:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Python编写一个重试机制,用于不稳定的网络通信。你知道吗

我的服务有多种方法:

method1()
method2(arg1)
method3(arg1, arg2)

我想将该方法传递给一个函数,该函数将重试传递给它的任何方法(我认为它可能如下所示):

retry (service.method1)
retry (service.method2, arg1)
retry (service.method3, arg1, arg2)

如何编写此重试方法?不幸的是,我使用的是python2.7.15


Tags: 方法函数service机制retryarg1arg2method1
1条回答
网友
1楼 · 发布于 2024-04-20 12:27:09
def retry(fn, *args, **kwargs):
    return fn(*args, **kwargs)

这样retry的第一个参数就是函数(方法),它将接受任意数量的参数和关键字参数并将它们传递给fn。这通常被称为“解包”,尽管在其他语言中我听过它被称为“splat”。你知道吗

这个版本只是立即调用它,但您可以根据需要添加延迟、循环或其他内容。你知道吗


I'd like to know more about the syntax that you used here. What am I looking at?

>>> def print_them(*args, **kwargs):
...     print(args, kwargs)  # args is a tuple & kwargs is a dict
...   
>>> print_them(1, 2, 3, spam='foo', bacon='bar')
(1, 2, 3) {'spam': 'foo', 'bacon': 'bar'}
>>> print(1, 2, 3, sep=':')       
1:2:3
>>> print(*[1, 2, 3], **{'sep': ':'})  # equivalent to the above
1:2:3

它是函数定义和函数调用语法的一部分,就像,()一样。它的含义与指数和乘法运算符完全不同。你知道吗

相关问题 更多 >