美文网首页
09-高阶函数

09-高阶函数

作者: 蛋挞先生L | 来源:发表于2018-11-05 20:38 被阅读0次

map()函数

  • 格式:map(func,lsd)
    • func:可以是一个python内置函数,也可以是我们的自己定义的函数
    • lsd:必须是一个序列,也可以说是一个容器
    • 功能: lsd这个容器里边的数据,会依次作用在前边的func上
    • map() 函数生成的是一个惰性序列,可以用类型转换成为序列,也可以用多个变量接收
# str1 = ["1","3","5","8","2","4"]
# print(str1)
# # print(int(str1))
# map1 = map(int,str1)
# # int("1")  int("3") int("5")  int("8")   int("2")  int("4")
# #map是一个惰性序列
# print(list(map1))

def func(value):
    dict = {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9,}
    return dict[value]
res = func("1")
print(res,type(res))
map1 = map(func,str1)
#把str1里边的所有元素依次赋值给前边的func函数
print(list(map1))

例2:
list1 = [1,4,2,6,3,4,7,9]
dict = {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9,}
dict1 = {}
for key,value in dict.items():
    dict1[value] = key
# print(dict1)

def func(key1):
    dict = {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9,}
    dict1 = {}
    for key, value in dict.items():
        dict1[value] = key
    return dict1[key1]

map1 = map(func,list1)
print(list1)
print(list(map1))

reduce()函数

  • 格式:reduce(fn,lsd)
    • fn:一个函数 但是这个函数必须有两个参数
    • lsd:是一个序列 也可以说是一个容器
    • 功能: 把容器里边的前两个元素作用在 fn 上,然后得出的结果再和容器里边的第三位数作用在fn上,一直到容器里边的所有元素全部计算完毕
  • reduce() 函数在 functools 库中,需要 reduce 函数时需要先调用 functools 库
lsd = [1,2,3,4,5,6]
fn(fn(fn(fn(fn(1,2),3),4),5),6)
lsd = {1,3,6,4,5,8,7,2}
def func(a,b):
    return a*10 + b
res = reduce(func,lsd)
print(res,type(res))
# 相当于:
# func(1,3) ===> 13
# func(func(1,3),6) == func(13,6) == 136
# func(func(func(1,3),6),4) == func(func(13,6),4) = func(136,4) = 1364 ......

# lsd = "241356"  转换成 241356,不可用int、list等函数
# 利用 map() 函数把字符串转化为int型列表 
lsd = "241356"
dict1 = {"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9,0:"0"}
def func1(key1):
    return dict1[key1]
res1 = list(map(func1,lsd))
# 利用 reduce() 函数把int型列表组合成int型数据
def func2(num1,num2):
    return num1 * 10 + num2
res2 = reduce(func2,res1)
print(res2,type(res2))

sorted函数

  • 格式:sorted(lsd,key,reverse)
    • 用来排序的函数,参数必须是一个序列
    • lsd:一个序列
    • key:作用的函数,序列中的数值依此作用到函数上,得出的序列再进行排序
    • reverse:排序的方式,默认值为False,为升序排列;True为倒叙排列
    • 注意:key=函数,reverse=True
# 1.默认按照升序排列
# 整型和浮点型默认按照从小到大排序
# list1 = [1,2.3,5,7,3,9,0]
list1 = [-1,-2,-5,-3,1,2,3]
print(list1)
list2 = sorted(list1)
print(list2)

# 字符串按照ascii码排序
str1 = "a额bc啊d哦"
print(str)
str2 = sorted(str1)
print(str2)

# 2.通过参数设置进行降序排列
list3 = [1,-3,4,7,5,2,9,0]
print(list3)
list4 = sorted(list3,reverse=True)
print(list4)

# 通过绝对值降序排序
list5 = [1,3,4,-9,-8,6,7]
print(list5)
list6 = sorted(list5,key=abs,reverse=True)
print(list6)

# 列表中的字符串排序
list7 = ["1231","asdfaf","galifaifaoiflf","alsjflaj"]
print(list7)
# 按照字符串由短至长排序
list8 = sorted(list7,key=len)
print(list8)
# 按照字符串由长至短排序
list9 = sorted(list7,key=len,reverse=True)
print(list9)

filter()函数

filter(fn,lsd)
fn:一个函数
lst:一个序列
功能:过滤,判断序列中的数据依此作用在前面函数时返回的bool值,如果True,返回这个数值,如果为False,过滤掉这个数值
# lsd = [1,2,3,4,5,6,7,8,9]
#
# def func(key):
#     if key % 2 == 0:
#         return True
#     else:
#         return False
#
# #filter 同样是一个惰性序列
# res = filter(func,lsd)
# print(list(res))

lambda匿名函数

lambda表达式是一种简洁格式的函数。该表达式不是正常的函数结构,而是属于表达式的类型。 基本格式:

lambda 参数,参数...:函数功能代码
如:lambda x,y:x + y    获取2个值的和的lambda函数

带分支格式:

lambda 参数,参数... :值1  if 条件表达式  else 值2
如:lambda sex : '有胡子' if sex == 'man' else '没胡子'

调用函数格式:

lambda 参数,参数...:其他函数(...)
如:lambda x:type(x)

lambda表达式的优缺点:

优点:
    书写简单不需要def关键字
    不需要费脑子想函数名(匿名函数)看起来高大上!

缺点:
    lambda表达式功能受限,无法使用循环和多项分支
    复杂的操作,不适合lambda表达式

示例

#方式1.声明一个简单的lambda表达式
mylamb = lambda x,y:x+y
#调用函数
result = mylamb(4,5)
print(result)

#方式2.声明一个带有分支的lambda表达式
mylamb= lambda sex : '有胡子' if sex == 'man' else '没胡子'
#调用函数
result = mylamb('woman')
print(result)

#方式3.声明一个调用函数的lambda表达式
mylamb = lambda x:type(x)
#调用函数
result = mylamb('拾元')
print(result)

小试牛刀

需求:
    有列表["1","4","7","3","2","6","5","8","9"]
    1、求出这个列表由所有偶数组成的最大整数
    2、求出这个列表由所有奇数组成的最小奇数
lsd = ["1","4","7","3","2","6","5","8","9"]

#把字符串变成整型
dict1 = {"0": 0, "1": 1, "2": 2, "3": 3, "4": 4, "5": 5, "6": 6, "7": 7, "8": 8, "9": 9,}
str1 = lambda str0:dict1[str0]
i = list(map(str1,lsd))
print(i)
#过滤掉所有奇数
j = lambda i:i if i % 2 == 0 else 0
j1 = list(filter(j,i))
print(j1)
#降序排序
j1 = sorted(j1,reverse = True)
print(j1)
#将数据进行整合
a1 = lambda a,b:a*10+b
s = reduce(a1,j1)
print(s,type(s))

相关文章

  • 09-高阶函数

    map()函数 格式:map(func,lsd)func:可以是一个python内置函数,也可以是我们的自己定义的...

  • python学习(三)函数式编程

    高阶函数 函数也是变量,函数参数为函数的函数,称作高阶函数 自定义高阶函数 内建高阶函数 map/reducema...

  • 11.Lambda和高阶函数(Lambda and Higher

    高阶函数 kotlin_Lambda,高阶函数 *swift_高阶函数

  • Python | 高阶函数基本应用及Decorator装饰器

    一、高阶函数 理解什么是高阶函数?以及高阶函数的基本应用方法 ▲ 高阶函数 在了解什么是高阶函数之前,我们来看几个...

  • 四、函数进阶

    一. 高阶函数 参数类型包含函数类型或返回值类型为函数类型的函数为高阶函数。 常见的高阶函数 高阶函数的调用 二....

  • Kotlin 高阶函数

    什么是高阶函数 将函数作为参数或者返回值的,称高阶函数。 定义高阶函数 action是一个高阶函数,(Int) -...

  • 高阶组件

    高阶组件 先来引入这个概念 高阶函数是什么? 高阶函数就是一个函数返回一个函数eg: 高阶组件 类同 高阶组件就是...

  • [JS函数] (Array)の高阶函数

    JS函数 高阶函数 高阶函数英文叫Higher-order function。那么什么是高阶函数? JavaScr...

  • HOC - High Order Component 高阶组件

    高阶函数 简而言之,可以接收函数作为参数的函数就是一个高阶函数。 上面的hoc函数就是一个高阶函数。 高阶组件 高...

  • Day10. 高阶组件

    1. 认识高阶函数 什么是高阶组件呢?认识高阶函数.png 高阶函数: 接收一个或多个函数作为输入, 输出一个函数...

网友评论

      本文标题:09-高阶函数

      本文链接:https://www.haomeiwen.com/subject/rqjexqtx.html