最近看了几篇匿名函数的文章,感觉都讲的不够清晰,所以写一篇匿名函数的文章 匿名函数(一句话函数)的定义 lambda开头 冒号隔开 形参和表达式 例如 lambda x:x+1 ---->x是形参,x+1为表达式,返回函数对象 lambda x:x+1和定义变量一样,如果只定义没有什么意义,定义完成之后就会被python解释器回收 言归正传,lambda单独表达式很简单,不过还有lambda...if....else , lambda.....for 比较绕 话不多说,上代码 lambda......if.....else 格式,例如 lambda x:True if x % 3==0 else return False 表示当入参和3取模 满足条件为真 ,则返回if左边的数据,如果为假则返回 if 右边的数据 转换成函数为 def lam(x): if x % 3 ==0: return True else: return False lambda...for 格式,例如 f = [lambda x: x * i for i in range(4)] #i = f[0,1,2,3] f为一个数组,for 循环把lambda函数加入这个数组中 由于我循环了4次,分别给lambda函数标号,如f[lambda1.lambda2,lambda3,lambda4] ***lambda返回的函数对象,f[0]输出lambda1这个函数对象 当f 里面的for循环循环4次后 i的值为3,然后执行lambda表达式,并没有跳出函数,所以当你运行;lambda表达式的时候i永远为3,数组f里面存在各个元素有是lambda对象 ,所以 我们调用这个lambda表达式为 f[index](x) index表示f数组中那个lamdba函数对象 x表述lambda的形式参数 所以我们给响应赋值f[0](2) ----输出6 ,f[1](2)------输出6 *由于for循环结束后i的值为3并没有跳出函数体 所以 表达式为:lambda 2:2*3,值根据lambda的入参的变化而变化 下面 转化为函数: def func(): f = [] for i in range(4): def lambda(x): return x * i f.append(lambda) return f |
|