这是代码:
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 :)
答案 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]