美文网首页
匿名函数

匿名函数

作者: 漓江塔塔主 | 来源:发表于2018-08-14 21:31 被阅读0次

用法

匿名函数是python语法中一种比较有趣的方法,它的用法很简单:

lambda [arg1 [,arg2,.....argn]]:expression

冒号前面传参数,后面写表达式。

  • 所谓匿名函数,就是函数是没有名字的,用lambda来定义一个函数。它的优点之一也就在此,不用担心函数名冲突。
  • 同时lambda 只是一个表达式,而不是一个代码块,函数体比 def 简单很多。但是也有缺点,仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
  • 匿名函数还有一点就是他比较方便,假如需要调用一个逻辑非常简单的函数,在别的地方写一个函数在调用过来就显得比较麻烦,而用匿名函数可以直接在参数的地方定义一个匿名函数即可,也增加了代码的可读性。

高级用法

其实说是lambda的高级用法,倒不如说是函数中的高级用法,lambda本质上也是为了方便python的函数式编程,所以说它和高阶函数的连用就显得更加方便。

map

map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
例如:

def f(a):
    return a*a
l=[1,2,3,4,5]
print(list(map(f,l)))

就可以用匿名函数简化为:

l=[1,2,3,4,5]
print(list(map(lambda a:a*a,l)))

reduce

再看reduce的用法。reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
单纯的求和使用sum就可以解决,但是如果要把序列[1, 3, 5, 7, 9]变换成整数13579,reduce就可以派上用场:

from functools import reduce##reduce不能直接调用
def fn(x, y):
    return x * 10 + y
reduce(fn, [1, 3, 5, 7, 9])
13579

lambda就简化为

s=reduce(lambda a,b:a*10+b, [1, 3, 5, 7, 9])

filter

Python内建的filter()函数用于过滤序列。
和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
例如,在一个list中,删掉偶数,只保留奇数,可以这么写:

list(filter(lambda n:n % 2 == 1, [1, 2, 4, 5, 6, 9, 10, 15]))

结果: [1, 5, 9, 15]
一行代码就可以写完

sorted

排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。
sorted()函数是一个高阶函数,它可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:

sorted([36, 5, -12, 9, -21], key=abs)

[5, 9, -12, -21, 36]
而这个key也可以用lambda来达到简单写的目的

相关文章

  • day11高级函数和变量的作用域

    1. 匿名函数 1.1 什么是匿名函数 没有函数名的函数就是匿名函数 (匿名函数还是函数!!!!!!) 1.2 ...

  • Day10-匿名函数&变量的作用域&函数递归&迭代器&生成器

    匿名函数 1.匿名函数 匿名函数就是没有函数名的函数; 匿名函数可以看成是类型是function的值和10, 'a...

  • Day10 函数

    一.匿名函数 1.匿名函数 匿名函数就是没有函数名的函数; 匿名函数可以看成是类型是function的值和10, ...

  • kotlin基础学习-2(匿名函数相关)

    匿名函数 定义时不取名字的函数,我们称之为匿名函数,匿名函数通常整体传递给其他函数,或者从其他函数返回。 匿名函数...

  • 总结Day10_函数提升

    ****函数**** ===匿名函数=== 1.什么是匿名函数   匿名函数还是函数,只是声明的格式和普通函数不一...

  • PHP全栈学习笔记32

    php自定义函数之匿名函数所谓匿名,就是没有名字。匿名函数,也就是没有函数名的函数。 变量函数式的匿名函数 内部函...

  • PHP全栈学习笔记32

    php自定义函数之匿名函数所谓匿名,就是没有名字。匿名函数,也就是没有函数名的函数。 变量函数式的匿名函数 内部函...

  • Kotlin - 函数解析

    匿名函数 定义时不取名字的函数,我们称之为匿名函数,匿名函数通常整体传递给其他函数,或者从其他函数返回。匿名函数对...

  • Day_10-函数(二)

    一、匿名函数 1.什么是匿名函数?定义:匿名函数还是函数,只是声明格式不同适用:函数功能比较简单的函数 2.匿名函...

  • Python精简学习(九)

    Python精简学习之函数之匿名函数-匿名函数

网友评论

      本文标题:匿名函数

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