关于函数:使用Python中已提供的参数创建一个可调用对象

Create a callable object with arguments already supplied in Python

本问题已经有最佳答案,请猛点这里访问。

本质上,我试图将参数传递给函数,但推迟执行该函数直到以后。 我不想延迟一段时间,或者我只想sleep。 这是我要用的用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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。 我相信我可以用类似的东西做到这一点

1
2
3
4
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

然后用它作为

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

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


你在寻找functools.partial

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

1
2
3
obj = functools.partial(test_for_active_server, server_address="http://localhost/")
# ...do other things...
obj()