这段代码
import itertools
import functools
i = itertools.cycle(["1", "2"])
def f1():
return next(i)
def f2(a):
print(a)
f = functools.partial(f2, f1())
f()
f()
产生输出1 1
。
是否有一种明显的方法可以防止在创建 f
时计算 f1
,因此结果输出将为 1 2
?
最佳答案
使用闭包代替 functools 怎么样?
import itertools
i = itertools.cycle(["1", "2"])
def f1():
return next(i)
def f2(a):
print(a)
def wrap(target, fun):
def inner():
target(fun())
return inner
f = wrap(f2, f1)
f() # 1
f() # 2
关于python-3.x - 如何将可调用对象作为参数传递给 `functools.partial`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60199262/