前言
今天已经是搬进来的第三天,难免会有些小争吵,小矛盾。不过最多的还是甜甜的幸福感。现在一个人在家学习,有蛮想我们家宝宝。而且最近天气都很好,阳光明媚。风慢慢吹动窗帘,看着真的让人很舒服。
高阶函数
在讲高阶函数前,要先理解一个概念–函数式编程,高阶函数属于函数式编程。
高阶函数(经常简称为HOFs),使我们可以通过将简单的函数结合为新函数以表达复杂的概念。简单而言,一个高阶函数就是以一个或多个函数为参数并返回一个函数的函数。
常用的高阶函数有:map 、reduce、filte、sorted
函数式编程
- 函数本身可以赋值给变量,赋值后变量为函数;
- 允许将函数本身作为参数传入另一个函数;
- 允许返回一个函数。
map
map(function_to_apply, list_of_inputs)
map接收一个函数,和一个迭代对象,将迭代对象的元素依次传入函数中,最后返回一个map对象
例子:
A = range(1,6)
def func1(x):
return x**2
ret = map(func1,A)
print(ret,type(ret))
<map object at 0x00000000028BDA90> <class 'map'>
高阶函数一般配合匿名函数使用:
ret1 = map(lambda x : x**2 ,A)
print(list(ret1))
[1, 4, 9, 16, 25]
reduce
reduce接收的函数需要接收两个变量,实现累计操作。
from functools import reduce
def func1(x,y):
return x*10 + y
print(reduce(func1,[1,3,5,7,9]))
13579
filter
顾名思义, filter 创建一个列表, 其中包含通过某个函数条件返回True 的元素。
#求1-100中可以被三整除的数字
print(list(filter(lambda x: x % 3 == 0 , range(1,100))))
sorted
先说说,同时排序, 两个內建函数sort 和 sorted的区别。
同样是排序函数, 先说一说两者的区别:
sort: 作用于list, list.sort(), 在list中直接排序。
sorted: 作用于任何可迭代的对象, list, tuple, dict …
print(sorted([6,1,-21,34,12,-10] ,key=abs))
#根据绝对值排序
[1, 6, -10, 12, -21, 34]
拓展
一、有 以 下 列 表 : listt1=[7, -8, 5, 4, 0, -2, -5]
- 正 数 在 前 负 数 在 后
- 整 数 从 小 到 大
负 数 从 大 到 小
def cpb(x):
if x < 0 : return 100000+x*x else: return x
a = [7,-8,5,4,0,-2,-5]
print(sorted(a,key=cpb))
[0, 4, 5, 7, -2, -5, -8]
二、这 是 一 个 字 符 串 排 序 , 排 序 规 则 : 小 写 < 大 写 < 奇 数 < 偶 数 s = ‘asdf234GDSdsf23’ # 排 序 : 小 写 - 大 写 - 奇 数 - 偶 数
原 理 : 先 比 较 元 组 的 第 一 个 值 ,FALSE
import string
def str_key(x):
#判断是否为数字
if x.isdigit():
if int(x) % 1 == 1:
return ord(x) + 75
else:
return ord(x) + 85
elif x in string.ascii_lowercase:
return ord(x) - 90
else:
return ord(x)
str_1 = "asdf234GDSdsf23"
str_2 = "dgGSFEffdfSd213sdfDGDsd014535"
print("".join(sorted(str_1,key=str_key)))
print("".join(sorted(str_2,key=str_key)))
addffssDGS22334
dddddffffgssDDEFGGSS011233455
v1.5.2