Создайте вызываемый объект с аргументами, уже предоставленными в Python

По сути, я пытаюсь передать аргументы функции, но отложить выполнение этой функции до позже. Я не хочу откладывать на какое-то время, или я бы просто sleep, Вот использование я иду

import requests

def test_for_active_server(server_address):
    response = requests.get(server_address)

try_n_times(func, expected_error, n_iterations):
    for i in range(n_iterations):
        try:
            func()
            break
        except expected_error:
            continue
    else:
        return False
    return True

try_n_times(
    create_callable(test_for_active_server("http://localhost/"),  
    requests.ConnectionError, 10)

Проблема здесь, конечно, в том, что когда я звоню test_for_active_server("http://localhost/") он просто побежит сразу, поэтому аргумент create_callable просто будет None, Я считаю, что я мог бы сделать это с чем-то вроде

def create_callable(func, func_args: List[str], func_kwargs: Dict[str, str], *args):
    def func_runner():
        func(*args, *func_args, **func_kwargs)
    return func_runner

а затем использовать его как

create_callable(test_for_active_server, "http://localhost")

Но это довольно неловко. Есть лучший способ сделать это?

1 ответ

Решение

Ты ищешь functools.partial,

Вы можете предоставить все аргументы, так что вы можете сделать что-то вроде:

obj = functools.partial(test_for_active_server, server_address="http://localhost/")
# ...do other things...
obj()
Другие вопросы по тегам