分享

匿名函数

 小猪窝969 2018-11-22
最近看了几篇匿名函数的文章,感觉都讲的不够清晰,所以写一篇匿名函数的文章
匿名函数(一句话函数)的定义 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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多