Python 部分函数没有执行

Python partial function doesn't execute

我刚开始使用 Python 中的 partial 函数。这是一段简单的代码,我期待它打印出结果,但不知何故它不打印任何东西,或者说显示 firstfunc 被执行:

from functools import partial

class zebra(object):
    def firstfunc(self, a, b, c):

        res = 3*a + 55*b + c
        print(res)
        return res

    def partial_func(self, a, c):
        return partial(self.firstfunc, b = 2)


myzebra = zebra()
alist = [1, 2, 3, 4]
blist = [7, 8, 9, 11]

map(myzebra.partial_func, alist, blist)

你的myzebra.partial_func()调用了,它returns是一个偏函数对象。如果您希望它也被称为 ,请在 myzebra.partial_func():

中这样做
def partial_func(self, a, c):
    return partial(self.firstfunc, b = 2)(a=a, c=c)

或在 map() 中使用 lambda 为您调用它:

map(lambda a, c: myzebra.partial_func(a, c)(a=a, c=c), alist, blist)

请注意,因为您将 b 设置为关键字参数,所以您也必须将 至少 c 作为关键字参数传递。

map()不会递归调用对象;只调用最外层的对象。

在 Python 2 中,代码现在有效:

>>> map(lambda a, c: myzebra.partial_func(a, c)(a=a, c=c), alist, blist)
120
124
128
133
[120, 124, 128, 133]

在Python 3中,map()是惰性循环,所以你需要迭代它才能执行:

>>> list(map(lambda a, c: myzebra.partial_func(a, c)(a=a, c=c), alist, blist))
120
124
128
133
[120, 124, 128, 133]