我一直很好地利用这个通常在我需要的时候定义的函数,因为它太小了:
def func(_lambda, *args):
return _lambda(*args)
即
[func((lambda x: (("fizbuz" if x%5==0 else "fiz")
if x%3==0 else ("buz" if x%5==0 else x))), x)
for x in list(range(1,101))]
Python 中是否有与此等效的内置函数?
请您参考如下方法:
看看 functools.partial ( docs )。
从广义上讲,您看到的是这样的东西:
from functools import partial
def func(*args):
# your logic here
myfunc = partial(func, *args)
如果需要,可以将额外的参数传递给 myfunc;来自 docs 的示例很好地证明了这一点:
>>> from functools import partial
>>> basetwo = partial(int, base=2)
>>> basetwo('10010')
18
对于您的情况而言,这些都不是必需的,因为将您的 fizzbuzz 逻辑从列表理解中移出并放入一个单独的函数中,您可以像这样使用它(在我看来,这更容易理解):
[fizzbuzz(x) for x in range(1, 101)]
(虽然部分是袖手旁观的便利技巧。)
