分配功能,忽略第一个值

时间:2014-06-16 00:48:05

标签: python python-2.7

首先让我说我不认为这是重复的。我已经检查过Ignore python multiple return value了。这不是我所需要的。

所以,我有一个函数f:

def f(parameters):
    return a,b # returns two values

module1.py中定义。现在,我希望另一个类知道这个函数,所以我这样做:

import module1

Class MyClass:

    def __init__(self):
        self.function = module1.f

这当然发生在module2.py。我需要在另一个模块中调用它, module3.py喜欢这样:

import module2

instance = module2.MyClass()

otherFunction(args, instance.function  )

这里有一个问题:otherFunction的第二个参数必须是一个返回单个值的函数(当前,它返回两个)。我试过了

import module1

Class MyClass:

    def __init__(self):
        self.function = module1.f[0]

但这不起作用。有任何想法吗?我无法改变module3.py。我可以改变其他人但是我必须对我的项目进行一些更改,这似乎非常痛苦。 我使用python 2.6。如果你找到的任何解决方案也适用于python3,我会很高兴。

4 个答案:

答案 0 :(得分:2)

您可以尝试使用装饰器:

def mydecorator(f):
    def w(*args, **kwargs):
        r = f(*args, **kwargs)
        return r[0]
    return w

@mydecorator
def f(a, b):
    return a + 2, b + 3 # returns two values

print f(1, 2) # 3

答案 1 :(得分:2)

如果您需要接受任意函数,那么您可以使用lambdas或包装函数:

self.function = lambda *args: module1.f(*args)[0]

否则,请查看@Christian的回答。

答案 2 :(得分:1)

创建一个环绕f的lambda:

Class MyClass:

    def __init__(self):
        self.function = lambda parameters: module1.f(parameters)[0]

答案 3 :(得分:0)

好的,这可能是一个愚蠢的问题:

module1.py我做:

def f(parameters):
    retrun a,b # returns two values

def ff(parameters):
    a, b = f(parameters)
    return a

并使用ff代替f