一、匿名函数与有名函数区别
匿名函数(lambda函数): 在Python中,lambda函数是一种简洁的、在定义时不需要命名的小型函数。
通常,lambda函数都非常简单,只有一行代码。
由于lambda函数在定义后立即被调用,并且通常只被调用一次,所以在调用完之后它就会被垃圾回收机制回收。
因此,lambda函数不适合用于需要反复调用的场景。
匿名函数:造出是内存地址,且内存地址没有绑定任何名字(引用计数为0),意味匿名函数被定义完之后(调用完成一次),立马会被当作垃圾回收掉
有名函数(普通函数): 需要重复调用、使用 def关
lambda函数: 轻量级函数
lambda格式: lambda 参数:式子
二、简单例子
def add(a, b=1):
return a+b
print(add(a+b))
add = lambda a, b =1: a+b
:前跟 a, b 为匿名函数的参数
:后跟函数体
def func(a, b):
return a + b
func = lambda a, b : a + b
result = func(22, 88)
print(result)
三、简单用法
3.1使用if条件
利用三项表达式
get_add_even = lambda x: 'even' if x % 2 == 0 else 'odd'
print(get_add_even(8)) even
print(get_add_even(9)) odd
3.2 使用无参数表达式
import random
ran_lambda = lambda: random.random()
print(ran_lambda())
0.6362529555982697
3.3 lambda在函数式编程中应用
map、reduce、filter、sorted等函数都支持函数作为参数
lambda函数就可以应用在函数式编程中
func( 1, 2 lamdba m, n: m + n )
li = [
{'name':'zhouyu', 'age':18},
{'name': 'huangzhong', 'age': 60},
{'name': 'guanyu', 'age': 21},
{'name': 'mateng', 'age': 27},
{'name': 'liubie', 'age': 36}
]
li.sort(key=lambda x:x['name']) #按照名字排序
li.sort(key=lambda x:x['age']) #按照年龄排序
字典中排序与筛选元素
dic = {'a': 1, 'd': 2, 'g': 3, 'f': 8, 'c': 6 }
dic2 = sorted(dic.items(), key=lambda x: x[1]) # 按照value排序
dic = {x : randint(60, 100) for x in range(1, 3)} # 字典中筛选元素
dic2 = {k: v for k, v in dic.iteritems() if v > 89 } # iter 迭代
print(dic) {1: 90, 2:75, 3: 89}
print(dic2) {1:90, 3:89}