Python中是否有一个单行闭包函数?

2024-06-28 10:52:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在很好地利用这个函数,它通常在我需要的时候定义,因为它太小了:

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中是否有与此等效的内置函数


Tags: lambda函数利用forreturnif定义def
2条回答

python3不再有apply函数(尽管python2有)

列表理解消除了使用函数的需要。直接使用函数体

[("fizbuz" if x%5 == 0 else "fiz") 
 if x%3 == 0
 else ("buz" if x%5 == 0 else x)
   for x in list(range(1,101))]

这也更有效,因为不再重复调用用户定义的函数

看看functools.partialdocs

大体上,你会看到这样的情况:

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)]

(不过,这是一个很好的技巧。)

相关问题 更多 >