Напишите механизм повтора в Python, используя функции в качестве аргументов - PullRequest
0 голосов
/ 22 декабря 2018

Я хотел бы написать механизм повторных попыток в Python для нестабильной сетевой связи.

В моем сервисе есть несколько типов методов:

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

Я хочу передать методк функции, которая будет повторять любой метод, переданный ей (я думаю, это может выглядеть так):

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

Как мне написать этот метод повторной попытки?К сожалению, я использую Python 2.7.15

1 Ответ

0 голосов
/ 22 декабря 2018
def retry(fn, *args, **kwargs):
    return fn(*args, **kwargs)

Таким образом, первый аргумент retry является функцией (методом), и он будет принимать произвольное количество аргументов и аргументов ключевого слова и передавать их в fn.Это часто называют «распаковкой», хотя в других языках я слышал, что это называется «сплат».

Эта версия просто вызывает ее немедленно, но вы можете добавить задержку, цикл или что-то еще, если нужно.


Я хотел бы узнать больше о синтаксисе, который вы использовали здесь.На что я смотрю?

>>> 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

Это часть синтаксиса для определений функций и вызовов функций, точно так же как , или ().Он имеет совершенно иной смысл, чем операторы степени и умножения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...