一、函数式编程
1、在Python中,函数是一等对象
(1)一等对象一般会具有以下特点
①对象是在运行时创建的
②能赋值给变量或作为数据结构中的元素
③能作为参数传递
④能作为返回值返回
(2)高阶函数
①接受一个或多个多个函数作为参数
②将函数作为返回值返回
二、高阶函数
1、接收函数作为参数,或者将函数作为返回值的函数就是高阶函数
当我们使用一个函数作为参数时,实际上是将指定的代码传递进了目标函数
# 创建一个列表
l = [1,2,3,4,5,6,7,8,9,10]
# 定义一个函数
# 可以将指定列表中的所有的偶数,保存到一个新的列表中返回
def fn(lst) :
# 定义一个函数,用来检查一个任意的数字是否是偶数
def fn2(i):
if i % 2 == 0 :
return True
return False
'''
fn()函数可以将指定列表中的所有偶数获取出来,并保存到一个新的列表中返回
参数:
lst :要进行筛选的列表
'''
# 创建一个新列表
new_list = []
# 对列表进行筛选
for n in lst :
# 判断n的奇偶
if fn2(n):
# if n % 2 == 0 :
new_list.append(n)
#
# 返回新列表
return new_list
print (fn(l))
# 定义一个函数,用来检查一个任意的数字是否是偶数
def fn2(i) :
if i % 2 == 0 :
return True
return False
# 这个函数用来检查指定的数字是否大于5
def fn3(i) :
if i > 5 :
return True
return False
def fn(func,lst) :
'''
fn()函数可以将指定列表中的所有偶数获取出来,并保存到一个新的列表中返回
参数:
lst :要进行筛选的列表
'''
# 创建一个新列表
new_list = []
# 对列表进行筛选
for n in lst :
# 判断n的奇偶
if func(n):
new_list.append(n) # 将 n 加入 new_list 列表中
# 返回新列表
return new_list
def fn4(i):
if i % 3 ==0 :
return True
return False
print (fn(fn4,1))
2、filter()
(1)filter()可以从序列中过滤出符合条件的元素,保存到一个新的序列中
(2)参数:
①函数,需要该函数来过滤序列(可迭代的结构)
②需要过滤的序列(可迭代的结构)
返回值:过滤后的新序列(可迭代的结构)
二、匿名函数 lambda 函数表达式
1、lambda 函数表达式专门用来创建一些简单的函数,他是函数创建的又一种方式。
2、语法:lambda 参数列表:返回值
3、匿名函数一般都是作为参数使用,其他有情况下一般不使用
def fn(a,b)
return a + b
print (fn(123,456))
# 使用 lambda 进行计算
lambda a,b : a + b
# 也可以将匿名函数赋值给一个变量,一般不会这么用
# fn2=lambda a,b : a + b
# 调用函数
# (lambda a,b : a + b)(10,20) 通常不这样使用
三、map()
1、map()函数可以对可迭代对象中的所有元素做指定的操作,然后将其添加到一个新的对象中进行返回
l = [1,2,3,4,5,6,7,8,9,10]
r = map (lambda i : i + 1 , l) # 将l中的所有元素都加1
print (list(r)) # 只有使用list才能打印出来数字
四、sort()
1、该方法用来对列表中的元素进行排序
2、sort()方法默认是直接比较列表中的元素的大小
3、在sort()可以接受一个关键字参数,key
(1)key需要一个函数作为参数,当设置了函数作为参数,每次都会以列表中的一个元素作为参数来调用函数,并且使用函数的返回值来比较元素大小
l = ['bb','aaaa','c','dddddddd','fffff']
l.sort()
# l.sort(key.len) 对长度进行排序
print(l)
l = [1,2,'1',3,'6','4']
l.sort(key=int) # 进行类型转换
print l
五、sorted()
1、这个函数和sort()的用法基本一致,但是sorted()可以对任意的序列进行排序
2、使用这个sorted()排序不会影响原来的对象,而是返回一个新对象
l = [1,2,'1',3,'6','4']
print('排序前:',l)
sorted(l,key = int ) # 打印这个之后显示的是排好的函数
print ('排序后:',l)