Python部分函数不会执行

时间:2016-01-23 19:32:57

标签: python map-function partial-application

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

1 个答案:

答案 0 :(得分:2)

您的@Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); final List<Object> providers = new ArrayList<Object>(); JacksonJaxbJsonProvider jacksonJsonProvider = new JacksonJaxbJsonProvider(); providers.add( jacksonJsonProvider ); webClient = WebClient.create( "http://localhost:8080/api", providers ); WebClient.getConfig( webClient ).getRequestContext().put( LocalConduit.DIRECT_DISPATCH, Boolean.TRUE ); webClient.accept( "application/json" ); } 调用,并返回部分函数对象。如果您希望将其称为以及,请在myzebra.partial_func()中执行此操作:

myzebra.partial_func()

或使用def partial_func(self, a, c): return partial(self.firstfunc, b = 2)(a=a, c=c) 中的lambda为您调用它:

map()

请注意,由于您将map(lambda a, c: myzebra.partial_func(a, c)(a=a, c=c), alist, blist) 作为关键字参数,因此您必须至少将 b作为关键字参数传递。

c不会递归调用对象;只调用最外面的对象。

在Python 2中,代码现在可以运行:

map()

在Python 3中,>>> map(lambda a, c: myzebra.partial_func(a, c)(a=a, c=c), alist, blist) 120 124 128 133 [120, 124, 128, 133] 懒洋洋地循环,所以你需要迭代它才能执行它:

map()