我想知道在Python中lambda
是什么,它在哪里以及为什么使用它。
谢谢。
我想知道在Python中lambda
是什么,它在哪里以及为什么使用它。
谢谢。
def make_incrementor(n):
return lambda x: x + n
f = make_incrementor(42)
f(0)
>>> 42
f(1)
>>> 43
因此,make_incrementor创建一个函数,该函数在其结果中使用n。您可以编写一个函数,使参数增加2,如下所示:
f2 = make_incrementor(2)
f2(3)
>>> 5
在函数式编程和像Lisp&Scheme这样的函数式编程语言中,这是一个非常强大的思想。
希望这可以帮助到您。
f3 = make_incrementor(3)
。f2会将2添加到x,而f3会将3添加到x。两个不同的lambda,每个都绑定到不同值的参数n。 - Dave函数表达式不等同于匿名函数。函数表达式是匿名表达式。
虽然函数表达式可以像函数一样访问,但它们与函数并不相同。函数能够执行复杂的任务:流程控制、变量声明和包含表达式的语句列表。表达式仅仅是函数的其中一个组成部分,并且这也是函数表达式所提供的。与函数相比,函数表达式受到了很大的限制。
Python 不支持匿名函数。如果想要使用这种功能,可以查看 JavaScript 和 Lua 等语言的例子。
(注意:在函数式编程语言中,使用 "函数" 这个词来表示数学定义的函数是正确的,但在过程式语言中,"函数" 这个词与数学定义的意义完全不同。所以,在过程式语言中,把函数表达式称为匿名函数是不准确的。)
x*2
的参数是 x
。Lambda 允许您将表达式封装为对象。 - Glenn Maynardlambda
允许你在代码中定义简单的、无名的函数,例如作为参数传递。如果你计划仅使用这个函数一次,因此不希望用命名函数来使代码混乱,则这非常有用。
假设你有一个数字列表(thelist
),你想要得到一个与其长度相同的数字列表,其中每个数字都加倍。你可以像这样操作,而不是定义一个 times_two
函数:
map(lambda x: x * 2, thelist)
lambda
也使得柯里化更加方便。
def first_element(x):
return x[0]
my_list.sort(key=first_element)
my_list.sort(key=lambda x: x[0])
lambda
是一种更简单的方式来定义一个计算单个表达式的简单函数。使用def
语句可能会不方便,使代码变得更长、更难阅读。两者创建的函数在工作方式上几乎相同,区别在于lambda
仅限于单个表达式,其值被返回,而def
为函数分配名称,并将其添加到本地变量中。此外,lambda
可以直接用于表达式,而def
是一个语句。请保留HTML标记。def f(x, y):
return x + y
这会给你几乎与之相同的结果,就像
f = lambda x, y: x + y
你可以直接在表达式中使用它
g(5, 6, helper=lambda x, y: x + y)
使用def
会更加冗长。
def helper_function(x + y):
return x + y
g(5, 6, helper=helper_function)
lambda
是一种定义匿名内联函数以完成某些任务的方式,而不是使用def
关键字进行定义并调用它。将其视为一种简写,当您不需要重用函数时可以使用它。在任何使用lambda
的地方,您都可以替换为显式调用的函数:它的使用完全是可选的,并留给程序员作为编码风格问题。
示例代码(不使用lambda):
def numSquared(num):
return num**2
for i in range(1,11):
print numSquared(i)
示例代码(使用lambda):
for i in range(1,11):
print (lambda x: x**2)(i)
一个关于lambda
的好入门讨论:DiveIntPython.org - Lambda
这是一个内联匿名函数。
lambda
是一个匿名函数,通常用于需要快速计算的事情。
例如(这在LexYacc命令解析器中使用):
assign_command = lambda dictionary, command: lambda command_function: dictionary.setdefault(command, command_function)
这是一个装饰器。放在我们从LexYacc解析器中得到的命令之前:@assign_command(_command_handlers, 'COMMAND')
这本质上是从定义的LexYacc语言构建Python脚本。
或者,更简单一点:
`x = lambda x: return x > 0 and x & (x-1) == 0
我想用一种通俗易懂的方式来解释这个问题,因为所有的技术细节已经被涵盖了。
一个 lambda 函数就像任何其他函数一样,唯一使它不同的是(除了语法和不能重复使用的事实),它在我们想要快速编写一个函数以仅使用一个表达式来接受参数并返回值时使用。
例如: 如果一个函数所做的只是接受一个参数并将其加1,那么使用 lambda 函数比普通函数更好。 但是,如果您的函数需要多行处理才能返回值,则需要使用普通函数定义,然后调用它。