Python部分函数不执行

2024-05-28 20:26:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我对在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)

Tags: 函数代码self内容returndefrespartial
1条回答
网友
1楼 · 发布于 2024-05-28 20:26:55

调用myzebra.partial_func(),它返回一个partial function对象。如果您希望它也被称为,请在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]

在Python3中,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]

相关问题 更多 >

    热门问题