Python |完全可以使用lambda表达式替换此函数

时间:2017-12-15 01:19:11

标签: python lambda

这是代码:

def print_limit(lim):
  counter = 2
  prev_val= 1+counter 
  print(1)
  while counter+prev_val < lim:
    print(counter+1)
    counter +=1

limit = int(input('Limit: '))
print_limit(limit)

实际上可行吗?我是lambda表达的新手,你可以用它们做这种事吗?谢谢James :)

3 个答案:

答案 0 :(得分:2)

嗯,技术上,是的:

print_limit = lambda lim: (print(1), [print(c + 1) for c in range(2, lim- 3)])

但真正的问题是为什么?我提供的代码与你的代码完全相同,但它看起来很可怕。这是一堆错误的胡言乱语,实际上碰巧做了些什么(虽然我真的不明白是什么)。

Lambda不是功能的完全替代品。它们适用于需要将函数传递给某些东西的时候,但函数非常简单,通常类似于:

def myfunc(args):
    return expression

这是一种相当常见的模式,例如排序:

mylist = [(0, 2), (4, 3), (5, 1)]
mylist.sort(key=lambda v: v[1])
mylist
# [(5, 1), (0, 2), (4, 3)]

事实上,他们对于不太广泛地使用lambdas感到如此强烈,以至于Python的官方风格指南PEP 8表示你甚至不应该给一个名字。

如果您打算重复使用它,请给它一个真正的函数定义。

答案 1 :(得分:1)

我不认为你可以在lambda中放入while循环,如果可以的话,你不应该。您可以使用map或类似内容解决此问题,但请注意Zen of Python

Lambda表达式通常很简单,易于阅读。您的print_limit函数更具可读性。

答案 2 :(得分:0)

您正在使用此功能正在打印1,3,4,... lim-3 这可以通过范围函数轻松实现

list_limit = lambda lim: [1] + list(range(lim - 2))
print_list = lambda lim: [print(x) for x in list_limit(lim)]

为什么你想要这样的功能对我来说还不清楚。

或只是

print_limit = lambda lim: [print(x) for x in range(1, lim - 2) if x!=2]