首先让我说我不认为这是重复的。我已经检查过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,我会很高兴。
答案 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
。