假设我想计算以下内容f(f(...f(x)..).
基本上很多次都是自身的功能.
目前我正在做以下事情来实现这个结果(并返回所有中间步骤):
def iterator(function, x, n=4):
x = float(x)
arr = []
for i in range(n + 1):
arr.append(x)
x = function(x)
return arr
def funcM(x):
return x / 4 + 12
Run Code Online (Sandbox Code Playgroud)
然后我将我的函数funcM作为参数传递:
print iterator(funcM, 100, 5).
这种方法没有错,计算是正确的.
但有没有办法在没有定义功能的情况下做同样的事情funcM?
可能是将lambda函数作为参数传递给迭代器函数(对不起,如果它没有意义,我真的不知道lambda函数是什么).
Max*_*oel 33
lambda函数(或更准确地说,lambda 表达式)只是一个您可以在现场定义的函数,就在您需要的地方.例如,
f = lambda x: x * 2
Run Code Online (Sandbox Code Playgroud)
是完全一样的
def f(x):
return x * 2
Run Code Online (Sandbox Code Playgroud)
当我准确地说,我的意思是 - 他们反汇编到相同的字节码.两者之间的唯一区别是第二个示例中定义的名称具有名称.
Lambda表达式变得有用,因为创建一个表达式不是语句,这意味着,正如其他人已经回答的那样,您可以这样做
print iterator(lambda x: x / 4 + 12, 100, 5)
Run Code Online (Sandbox Code Playgroud)
准确地得到你想要的东西.
然而,lambda表达式和常规函数之间的主要区别在于lambda更受限制.Lambdas只能包含表达式,而不能包含语句.表达式是您可以放在=任务右侧的任何内容.(如果你想变得更迂腐,Python将表达式定义为http://docs.python.org/2/reference/expressions.html)
这意味着lambda表达式无法赋值给变量(事实上,除了参数之外,它根本不能有局部变量).它无法打印(除非它调用另一个功能).它不能有for循环,while循环,if测试(除了三元运算符x if cond else y)或try/except块.
如果您需要执行其中任何操作,只需定义常规功能即可.事实上,只要你认为你想使用lambda,请三思而后行.如果您使用常规函数,代码不会更具可读性吗?那个lambda表达式是不是你想在代码中的其他地方重用?
最后,总是做一些导致最易读和可维护的代码.就性能而言,lambda和普通函数之间没有区别.
是的,你可以使用lambda表达式.它们是为此而制造的.
iterator(lambda x: x/4+12, 100, 5)
Run Code Online (Sandbox Code Playgroud)
来自文档的单词:
Lambdas通常用于创建小型匿名函数.实际上,它们只是定义函数的一种合成糖.上面的lambda表达式与您的函数完全相同,只是没有名称.
如果您想了解更多信息,请阅读以下内容:
http://www.diveintopython.net/power_of_introspection/lambda_functions.html
为什么要使用lambda函数?
| 归档时间: |
|
| 查看次数: |
23624 次 |
| 最近记录: |