是否有可能返回一个带参数的函数,但不调用它?



我想要一个函数,它发送其他函数(不执行它们,但将输入存储在其中),以便在我的计算的其他节点clúster上开始执行。第一个函数计算另一个函数的输入。

问题是yield在迭代开始时执行函数,但我只想让函数在集群的不同节点上执行它。

我创建了以下代码来解释我自己:

def calculate(a: int,b: int ,operation: str):
print("Working...")
if operation == 'multiply':
return a * b
elif operation == 'sum':
return a+b
def calculation_sender(a: [int], b:[int], operations: [str]):
for i in range(len(operations)):
yield calculate(a[i],b[i], operations[i])

a = [1,2,3]
b = [1,2,3]
operations = ['sum','multiply','sum']
for calculation in calculation_sender(a, b, operations):
print("Don't work yet!")
print(calculation)

输出:

工作……
不要工作!
2
工作…
不要工作!
4
工作……
不要工作!


6

是否有可能返回一个带参数的函数,但不调用它?

  • 是的,你可以使用functools.partial

代码:

import functools
def calculate(a: int,b: int ,operation: str):
print("Working...")
if operation == 'multiply':
return functools.partial(mul,a,b)
elif operation == 'sum':
return functools.partial(add,a,b)
def add(a, b):
return a + b
def mul(a, b):
return a * b
#return a function with parameters but without calling it
print(calculate(3,5,"sum"))
#when you need to call it, just add a "()"
print(calculate(3,5,"sum")())

结果:

Working...
functools.partial(<function add at 0x000002029FD94168>, 3, 5)
Working...
8

最新更新