0

本质上,我试图将参数传递给一个函数,但将该函数的执行推迟到以后。我不想耽误一些时间,否则我只会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")

但这比较尴尬。有一个更好的方法吗?

4

1 回答 1

5

你正在寻找functools.partial.

您可以提供所有参数,因此您可以执行以下操作:

obj = functools.partial(test_for_active_server, server_address="http://localhost/")
# ...do other things...
obj()
于 2018-05-08T15:02:29.030 回答