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_面向对象_高阶函数的主要内容,如果未能解决你的问题,请参考以下文章

Python 抽象篇:面向对象之高阶

面向对象高阶-补漏01比较魔法方法(__gt__等)

python-38-用于面向对象的内置函数

Python__面向对象

Python面向对象

python 面向对象十一 super函数