Python_面向对象_高阶函数
Posted bling-bling-star
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python_面向对象_高阶函数相关的知识,希望对你有一定的参考价值。
--高阶函数:map reduce sorted filter
--函数式编程
纯粹的函数式编程语言编写的函数没有变量,允许把函数本身作为参数传入另一个函数,允许返回一个函数,python语言部分支持
能够把函数当成参数传入,这样的函数叫高阶函数,常用的有 map reduce filter sorted
# 高阶函数 :能够把函数当成参数传入,这样的函数叫高阶函数
# 高阶函数 map
"""
map(fn,lsd)
fn 内置函数 或者 自定义函数
lsd 具有可迭代性的数据(容器类型数据,可迭代对象,迭代器)
功能 把lsd中的所有数据 一一应用在fn函数中 ,
返回迭代器
"""
# 案例1 int内置函数
listvar = ["3","5","7","9"]
diedaiqi = map(int,listvar)
# 案例2 myfunc自定义函数
listvar = [1,2,3,4,5]
# [1,4,9,16,25]
def myfunc(n):
return n ** 2
res = map(myfunc,listvar)
print(res)
res = list(res)
print(res)
# 小练习 {1:‘a‘,2:‘b‘,3:‘c‘} [a,b,c] [1,2,3]
def zidian(keys):
dictvar = {1:‘a‘,2:‘b‘,3:‘c‘}
dictvar2 = {}
for keyvar,valvar in dictvar.items():
dictvar2[valvar] = keyvar
return dictvar2[keys]
res = zidian(‘b‘)
print(res)
res = map(zidian,[‘a‘,‘b‘,‘c‘])
res = list(res)
print(res)
# 高阶函数 reduce
"""
reduce(fn,lsd)
fn 内置函数 或者 自定义函数
lsd 具有可迭代性的数据(容器类型数据,可迭代对象,迭代器)
功能 先拿出lsd这个数据中的前2个值,扔到fn函数中进行运算,
把运算的结果在和lsd中第三个元素一起放到fn函数中在进行运算,
直到lsd所有数据都一一应用到fn函数结束,返回最终的结果
"""
# 案例1
# [5,4,8,8] 5488
listvar = [5,4,8,8]
from functools import reduce
def func(x,y):
return x * 10 + y
res = reduce(func,listvar)
print(res)
# 案例2
# map + reduce 把"789" 转化成 整型 789
# 通过map 把字符串"789" => [7,8,9] 然后套上reduce 即可
def zhuanhua(keys):
dictvar = {‘0‘:0,‘1‘:1,‘2‘:2,‘3‘:3,‘4‘:4,‘5‘:5,‘6‘:6,‘7‘:7,‘8‘:8,‘9‘:9}
return dictvar[keys]
res = reduce(func,map(zhuanhua,"789"))
print(res,type(res))
#高阶函数 sorted
"""
sorted(lsd,reverse=False,key=函数)
lsd 具有可迭代性的数据(容器类型数据,可迭代对象,迭代器)
reverse 默认升序 True 代表降序
key 可以自定义 或者 使用内置函数
返回一个列表
"""
# 案例1 默认按照升序排列
listvar = [18,12,5,26]
res = sorted(listvar)
print(res)
# 案例2 使用降序
listvar = [18,12,5,26]
res = sorted(listvar,reverse=True)
print(res)
# 案例3
listvar = [78,-8,0,3]
res = sorted(listvar)
print(res)
# 案例4
# 把列表里面的数据 一个一个依次通过abs转化成绝对值之后再排序
listvar = [78,-8,0,3]
help(sorted)
res = sorted(listvar,key=abs)
print(res,type(res))
# 案例5
def ceshi001(n):
return n % 4
"""
2302 按照余数的大小 对原列表中的值排序,产生新的列表
"""
listvar = [22,99,88,66]
res = sorted(listvar,key=ceshi001)
print(res)
#高阶函数 filter
"""
filter(func,lsd)
lsd 具有可迭代性的数据(容器类型数据,可迭代对象,迭代器)
func 自定义的函数
功能:用来过滤的,通过把lsd中的每一个数据依次应用在func函数中,
如果func函数返回True ,则保留此数据,如果func函数返回False,则舍弃此数据
返回迭代器
"""
# 案例1 过滤所有奇数 得所有偶数
listvar = [1,2,3,4,5,6,7,8,9]
def myfunc(n):
if n % 2 == 0:
return True
else:
return False
res = filter(myfunc,listvar)
# print(list(res))
# 案例2 用lambda表达式来优化案例1
def myfunc(n):
func = lambda n : True if n % 2 == 0 else False
res = func(n)
return res
res = filter(myfunc,range(1,10))
print(list(res))
以上是关于Python_面向对象_高阶函数的主要内容,如果未能解决你的问题,请参考以下文章