函数和lambda之间的差异以及何时使用它们在Python 3中

时间:2015-06-30 02:41:34

标签: python function python-3.x lambda

我对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。

谢谢!

1 个答案:

答案 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。否则,最好不要使用一个错误。"