谈谈python中的 lambda
最近刚开始学习python,然后要加几个python的群去学习学习,但是呢有个群的申请栏要求写一个用lambda求1-100的和.....然后悲剧的就是不会啊....然后就没有然后了...
所以去网上找些帖子,学习学习lambda 原作者的帖子 http://blog.csdn.net/delphiwcdj/article/details/5749606,还参考了一些其他的帖子就不放链接了.
首先什么是lambda?
我们知道如果要使用一个函数的话,必须要写函数的定义,如下面的代码
def add(x,y): return x + y if __name__ == '__main__' add(x=1, y=2) //你要使用add函数的话,必须得有add函数的定义才行!
但是有的情况是,我们希望使用一个函数但又不想费神的去为这个函数取一个合适的名字,也就是我们希望使用匿名函数.那么lambda就可以帮我们定义这样的匿名函数对象
其次lambda的规则是什么
1.lambda 后面 和冒号前面的参数列表是没有小括号的.上面例子的x,y
2.冒号后面是函数的实现,会默认return的.上面会默认x+y 等价于 有名函数的return x+y
3.g在这里是被赋值的函数对象,类似函数名的东西. 你也直接使用lambda 例如 (lambda x,y:x+y)(1,2)
4.将它们用在需要封装特殊的,非重用的代码上,用许多小的一行函数不会弄乱代码。
5.lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数。 lambda 函数不能包含命令,它们所包含的表达式不能超过一个。不要试图向 lambda 函数中塞入太多的东西;如果你需要更复杂的东西,应该定义一个普通函数,然后想让它多长就多长。
lambda用于函数中的写法和调用技巧(1)
上面的twice还是一个函数对象 等价于 twice = lambda s : s*2 看来python可以从一个函数中返回另一个函数的地址啊...跟c++差别还是蛮大的.
lambda的应用-计算阶乘的n种方式
第一种方式: 自己写的函数递归调用,没用lambda
接下来就是用lambda的方式了:
剩下的2中计算阶乘的方式中用到了reduce函数,看下面的解释 [英文看不懂,没关系啊,直接看下面的英文里面的例子嘛:] 也就是说reduce有两个参数,第一个是函数对象(这个函数对象必须是两个参数) 第二个是一个列表 先把 1,2传入函数对象,得到结果a 再把a和3传入函数对象,得到结果b 再看一个例子: |
那么接下来我们看看剩下的集中用lambda求阶乘的方式吧
第二种方式
第三种方式 (用第三种方式的话只能感慨python的库真他娘的方便啊)