如何在不使用括号的情况下调用Python部分?

时间:2019-08-07 01:30:06

标签: python partial functools

假设以下代码:

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

预先感谢您的回答!

1 个答案:

答案 0 :(得分:1)

不在基本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)

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