Python 赋值函数,忽略第一个值
首先让我说我不认为它是复制品。我已经查过了。这不是我需要的 我有一个函数f:Python 赋值函数,忽略第一个值,python,python-2.7,Python,Python 2.7,首先让我说我不认为它是复制品。我已经查过了。这不是我需要的 我有一个函数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中。我需要在另
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
的第二个参数必须是一个返回单个值的函数(目前,它返回两个值)。我试过了
但这是行不通的。有什么想法吗?我无法更改模块3.py
。我可以改变其他的,但是我必须对我的项目做一系列的改变,这似乎是非常痛苦的。
我使用Python2.6。如果您找到的任何解决方案也适用于python3,我将非常高兴。您可以尝试使用装饰器:
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
创建环绕
f
的lambda:
Class MyClass:
def __init__(self):
self.function = lambda parameters: module1.f(parameters)[0]
如果需要接受任意函数,则可以使用lambdas或包装函数:
self.function = lambda *args: module1.f(*args)[0]
否则,请查看@Christian的答案。好的,这可能是一个愚蠢的问题: 在
module1.py
中,我执行以下操作:
def f(parameters):
retrun a,b # returns two values
def ff(parameters):
a, b = f(parameters)
return a
并使用ff
代替f
def f(parameters):
retrun a,b # returns two values
def ff(parameters):
a, b = f(parameters)
return a