1. 匿名函数lambda
定义的格式:
lambda [形参1],[形参2]:[单行的表达式]或[函数调用]
注意:
与普通函数的区别
1.没有函数名
2.参数列表没有括号
3.函数体中,只能实现简单的表达计算或者函数调用
4.不能使用while for if
5.可以使用if实现三目运算符,a if a>b else b
函数的引用,一个函数可以把他的引用赋值给一个变量,或者函数,这个时候不需要()
'''
使用场景:简单的一次性的使用
'''
# 检讨过一个函数的引用(也就是id)赋值给另一个变量
def show():
print("hello world!")
print(show)
# 注意此时不能加上括号,加上就表示函数的运行结果给了func
func = show
func()
# 实现一个函数发引用赋值给另一个函数的函数
def display():
print('dispaly run ')
def call_dis(func):
func()
# 注意此时不能带括号
call_dis(show)
call_dis(display)
匿名函数的应用
'''
定义一个匿名函数
注意:
默认返回表达式的计算结果,不需要return,加了报错
不能使用循环
'''
func = lambda :1+1
print(func)
print(func())
func =lambda x:print(x ** 10)
func(2)
# 三目运算符
func2 = lambda a,b:a if a>b else b
print(func2(1, 3))
2.高阶函数
2.1 map()函数
map 函数:是对参数列表中的元素做一个映射
案例:
m_list = [1,2,3,4]
def f(x):
return x **2
# result = map(f,m_list)
# 利用lambda代替函数
result =map(lambda n:n**4,m_list)
for i in result:
print(i)
print(type(result))
# map的实现原理
def my_map(func,c_list):
new_list=[]
for i in c_list:
n = func(i)
new_list.append(n)
return new_list
2.2 reduce函数
reduce不能直接的使用,需要导入模块functools
作用:根据传入的参数一对参数二中的数据进行累计
import functools
my_list = list('hello')
result =functools.reduce(lambda s1,s2:s1+s2,my_list)
print(result)
# 实现阶乘
l1 = [i for i in range(1,5)]
print(l1)
re = functools.reduce(lambda n1,n2:n1*n2,l1)
print(re)
2.3 filter函数过滤的作用
my_list =['hello', 'a', 'b', 'abc123','1']
l1 = filter(lambda s: s.isdigit(),my_list)
print(l1)
for i in l1:
print(i)
2.4 sort函数的参数key的用法
'''
函数sort
'''
my_list = [7,8,9,0,34,56,65,4,3]
my_list.sort()
print(my_list)
l1 = [{'id':1,'namae':'tom','age':92},{'id':3,'namae':'tom','age':50},{'id':2,'namae':'tom','age':32}]
# 默认sort不能对字典进行比较
# 这个时候可以使用sort的参数key的作用
# 按照id升序
l1.sort(key=lambda d:d['id'])
print(l1)
# 按照年龄
# l1.sort(key=lambda d:d['age'])
l1.sort(key=lambda d:d['age'],reverse=True)
print(l1)