首页 > 解决方案 > 如何在不使用括号的情况下调用 Python 部分?

问题描述

假设下面的代码:

from functools import partial
import random

def integer(min=1, max=10):
    return random.randint(min, max)

def double(min=1, max=10):
    return random.uniform(min, max)

if __name__ == '__main__':
    p1 = partial(integer, 5, 10)
    p2 = partial(double, 5, 10)
    for f in [p1, p2]:
        f() # I'd like to know if there's a different way to call this like `call(f)` or something

正如评论中提到的,我想知道是否有一种方法可以在f不使用括号的情况下进行调用。更进一步,假设我可以f在不使用括号的情况下调用,如果我想将其他参数传递给f,我该怎么做(比如call(f, additional_param_1, additional_param_2))?

预先感谢您的回答!

标签: pythonpartialfunctools

解决方案


不在基础 Python 中,但您可以轻松编写call()自己的代码:

from functools import partial
import random

def integer(min=1, max=10):
    return random.randint(min, max)

def double(min=1, max=10):
    return random.uniform(min, max)

def call(f, *args, **kwargs):
    return f(*args, **kwargs)

if __name__ == '__main__':
    p1 = partial(integer, 5, 10)
    p2 = partial(double, 5, 10)
    for f in [p1, p2]:
        call(f)

注意:您的示例中有一个错字,您正在调用partialon int,但您的函数被调用integer。(这两个名字都不是很好,我认为您正在尝试解决您没有说明的问题,但有更好的解决方案)


推荐阅读