python3 lambda表达式函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3 lambda表达式函数相关的知识,希望对你有一定的参考价值。
def _not_divisible(n):
bk = lambda x: x % n > 0
return bk
请教大神帮忙解释下,这个函数到底啥意思。最近在自学python3,发现高阶函数部分越来越抽象,有点吃力了。遇到这个问题,望大神不吝赐教。
我也刚学到这卡了,网上找的这个理解起来比较舒服一点
下面是自己总结的,运行也能成功。答案也是对的。。
_not_divisible(n)返回值是一个函数,这个函数接收一个(X)参数
_not_divisible(n)(X) 参考技术A 返回的是一个函数。。。
lambda 就是匿名函数。。。函数一般是接收(可以不接受)参数,执行特定的功能,然后返回(返回可以为空)
lambda x:x%n > 0,意思是这个匿名干了一件事,什么事呢,就是用函数的参数,对n取模后,判断是否大于0。其实就是判断函数的参数,是否是n的整数倍。然后返回的是这个匿名函数,然后_not_divisible函数再把这个匿名函数返回给调用者。
所以,bk就是一个函数。但这个函数可以通过n去控制
比如,调用divi_5 = _not_divisible(5),返回的是一个函数,这个函数接受一个参数,如果参数可以整除5,就返回False,否则True
怎么用呢?divi_5现在是指向到一个函数了,所以,它就是函数喽
divi_5(10)追问
那请问下,x是从哪冒出来的,谁给他赋值啊?这玩意跟java套路完全不一样啊。
python学习:函数---匿名函数 lambda
语法: lambda [arg1 [,arg2,.....argn]]:expression 说明: lambda 只是一个表达式,函数体比 def 简单很多。 lambda 主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。 lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。 lambda 可以有多个参数,参数之间用逗号隔开。 lambda 函数只能写一行。
例题:
func = lambda x:(x[0],x[2]) print(func(‘hello‘)) # (‘h‘, ‘l‘) func = lambda x,y: x if x > y else y print(func(3,100)) # 100 dic = {‘k1‘:20,‘k2‘:100,‘k3‘:40} print(max(dic)) # k3 print(max(dic,key=lambda k:dic[k])) # k2 ret = map(lambda x: x ** 2, [1, 2, 3, 4, 5]) print(list(ret)) # [1, 4, 9, 16, 25] # 提供了两个列表,对相同位置的列表数据进行相加 ret = map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8]) print(list(ret)) #[3, 7, 11, 15, 19] ret = sorted([30,6,-10,88,-20,22], key=lambda x: x*-1) print(list(ret)) # [88, 30, 22, 6, -10, -20] ret = filter(lambda x:x<0,[30,6,-10,88,-20,22]) print(list(ret)) # [-10, -20] # 两个元组((‘a‘),(‘b‘)),((‘c‘),(‘d‘)),请使用匿名函数生成列表[{‘a‘:‘c‘},{‘b‘:‘d‘}] t1 = ((‘a‘),(‘b‘)) t2 = ((‘c‘),(‘d‘)) #答案一 test = lambda t1,t2 :[{i:j} for i,j in zip(t1,t2)] print(test(t1,t2)) #答案二 print(list(map(lambda t:{t[0]:t[1]},zip(t1,t2)))) #答案三 print([{i:j} for i,j in zip(t1,t2)]) # 数组/字典的排序 array = [{"age":20,"name":"a"},{"age":25,"name":"b"},{"age":10,"name":"c"}] array = sorted(array,key=lambda x:x["age"]) print(array) # 先按照成绩降序排序,相同成绩的按照名字升序排序 array = [{‘name‘:‘alice‘, ‘score‘:38}, {‘name‘:‘bob‘, ‘score‘:18}, {‘name‘:‘darl‘, ‘score‘:28}, {‘name‘:‘christ‘, ‘score‘:28}] l = sorted(array, key=lambda x:(-x[‘score‘], x[‘name‘])) print(l) def multipliers(): return [lambda x:i*x for i in range(4)] # 相当于返回了四个lambda x:i*x,return的时候i=3 print([m(2) for m in multipliers()]) # [6, 6, 6, 6] def multipliers(): return (lambda x:i*x for i in range(4)) # 生成器表达式,返回的是一个生成器,调用一次return才执行一次 print([m(2) for m in multipliers()]) # [0, 2, 4, 6]
以上是关于python3 lambda表达式函数的主要内容,如果未能解决你的问题,请参考以下文章