我对Python(以及一般的编程)很陌生。我想知道,因为lambda和函数非常相似,什么时候使用哪个以及它们之间有什么区别?
我问的原因是我只看到lambda用于非常基本和简单的程序,例如:
sq = lambda x: x**2
print(sq(25))
虽然函数可以更复杂,比如有多个参数,不同的循环类型,if / else,递归,调用另一个函数(我认为是合成)等等。
我知道你可以在lambda中调用一个函数,如:
def turnUppercase(n):
return n.upper()
a = lambda x: turnUppercase(x)
print(a('Cookie'))
这个例子毫无意义,但仍然......我从未通过尝试其他事情来测试lambda的极限。
lambda的限制是什么?你如何扩展lambdas的功能(如果只是为了给人留下深刻印象)以匹配函数的功能? (在lambda中调用一个函数,调用另一个lambda,在里面循环,依此类推)。
注意我在问Python 3。
谢谢!
答案 0 :(得分:1)
lambda是一个无名的函数。在python中,它必须适合一行。它只有在你调用一个以另一个函数作为参数的函数时才有用。
示例:
listOfLists.sort(key=lambda x:x[1]) #Sort list of lists by second element
(参见sorting: Key Functions。可能是lambdas最常见的有效用途)
你可以在lambdas中做很多愚蠢的事情(查看用python编写的任何代码高尔夫)但是如果你打算在实际维护代码中使用它们,通常建议它们保持简单。
虽然函数可以更复杂,比如有多个参数,不同的循环类型,if / else,递归,调用另一个函数(我认为是合成)等等。
顺便说一句,我认为你在lambda中做的唯一一个就是递归。
多个参数:lambda x,y: x**2+y**2
循环(技术上):lambda x: [subprocess.call('pip install --upgrade ' + dist.project_name, shell=True) for dist in pip.get_installed_distributions()]
(是的,我知道我是一个可怕的人)
如果/ else:lambda x: "Blue" if x > 1000 else "Orange"
至于你在lambdas中做什么......呃,关键字参数? * ARGS?任何一点复杂,没有你的代码看起来像一个醉酒的猫徘徊,随机打击parens,方括号和大括号?
我认为"一般规则如果你的老板走近你并问了问题'为什么这是一个lambda'你可以立即回答并解释lambda的作用,你可能有理由使用lambda。否则,最好不要使用一个错误。"