Lambda or functools.partial for deferred function evaluation?
本问题已经有最佳答案,请猛点这里访问。
假设我们有一个基本功能:
1 2 | def basic(arg): print arg |
我们需要在另一个函数中推迟对该函数的求值。 我正在考虑两种可能的方式:
使用lambdas:
1 2 | def another(arg): return lambda: basic(arg) |
使用functools.partial
1 2 3 | from functools import partial def another(arg): return partial(basic, arg) |
哪种方法更受欢迎?为什么? 还有另一种方法吗?
Lambda不存储不在其参数中的数据。 这可能会导致奇怪的行为:
1 2 3 4 5 6 | def lambdas(*args): for arg in args: yield lambda: str(arg) one, two, three, four = lambdas(1, 2, 3, 4) print one(), two(), three(), four() |
预期产出
1 | 1 2 3 4 |
产量
1 | 4 4 4 4 |
发生这种情况是因为lambda没有存储
首选方法是使用
1 2 3 4 5 6 7 8 | from functools import partial def partials(*args): for arg in args: yield partial(str, arg) one, two, three, four = partials(1, 2, 3, 4) print one(), two(), three(), four() |
预期产出
1 | 1 2 3 4 |
产量
1 | 1 2 3 4 |
我认为这主要取决于个人品味,尽管