一. 匿名函数

Python使用 lambda 来创建匿名函数。所谓匿名函数,它与用 def 关键字定义的函数相比,没有函数名称。

1.1 匿名函数定义及特点

语法:

lambda [para1, para2, ...]: expression

从匿名函数的定义格式可以看出:

1. lambda后没有跟函数名,这就是匿名函数名称的由来.

2. [para1, para2, ...]是一个参数列表,它是可选的,而且是任何类型的.

3. expression表达式实现匿名函数功能的过程,并返回操作结果, 具有通常函数return的功能.

4. 整个匿名函数要在一行内实现所有定义.

1.2 代码示例

>>> lambda x, y: x+y    # 在一行定义匿名函数
<function <lambda> at 0x00000217D39E1F28> # 打印上面 >>> a = lambda x, y: x + y # 定义匿名函数并赋值给a
>>> a(2, 3) # a具有匿名函数的功能, 通过参数传值
5 # 输出结果

说明:

lambda的冒号前面表示的是参数,冒号后面的是表达式. 注意, lambda 可以接受任意多个参数, 但只能有一个表达式.

1.3 匿名函数的优点

 使用Python写一些脚本时,使用lambda可以省去定义函数的过程,让代码更加精简.
对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要考虑命名的问题.
使用lambda在某些时候能使代码更容易理解.

二. 匿名函数在内置函数中的使用

匿名函数一般不单独使用,经常与一些内置函数一块使用.

能使用匿名函数的内置函数为:

map,filter,max,min,sorted

记住上面这五个!!!

2.1 在 map 函数中的使用

map()函数接受两个参数.一个是函数, 一个是 Iterable(可迭代).

map 将传入的函数依次作用到序列的每个元素上., 并把结果作为新的 Iterator 返回.

举个例子:

def f(x):
return x * x lis = [1, 2, 3, 4, 5]
res = map(f, lis) # 求列表中每个数的平方
print(res) # 此时返回的是一个对象
<map object at 0x00000254573B0B38> print(list(res)) # 可以直接用list()求结果
[1, 4, 9, 16, 25]

用 lambda 表示就是这样:

lis = [1, 2, 3, 4, 5]
res = map(lambda x: x*x, lis) # 求列表中每个数的平方 print(res) # 同上面的例子一样,返回的是一个对象
<map object at 0x000001D102040B38> print(list(res)) # 用list()获取结果
[1, 4, 9, 16, 25]

2.2 在 filter 函数中的使用

和map()类似, filter()也接受一个函数,一个序列.

与map()不同的是,filter()把传入的函数依次作用于每个元素, 然后根据返回值是True还是False来决定保留还是丢弃该元素.

filter() 会根据判断结果自动过滤掉不符合条件的元素, 只返回由符合条件的元素组成的新列表(需要list一下).

举个例子:

# 在一个列表中, 删除偶数, 保留奇数
def is_odd(x):
return x%2 == 1 lis = [1, 2, 3, 4, 5, 6, 7, 8, 9]
res = filter(is_odd, lis)
print(res) # 注意, 这里依旧返回的是对象
<filter object at 0x0000022832D00C18> print(list(res)) # 这样返回的才是我们想要的结果
[1, 3, 5, 7, 9]

用 lambda 表示就是这样:

# 在一个列表中, 删除偶数, 保留奇数

lis = [1, 2, 3, 4, 5, 6, 7, 8, 9]
res = filter(lambda x: x % 2 == 1, lis)
print(res) # 同上例子,返回的是对象.
<filter object at 0x0000020A8F240B38> print(list(res)) # 这样就是我们想要的结果
[1, 3, 5, 7, 9]

2.3 在 max 函数中的使用

max() 函数返回给定参数的最大值.

举个例子:

# 找出字典中值最大的那个key
prices = {
'A': 123,
'B': 450.1,
'C': 12,
'E': 444,
}
res = max(prices, key=lambda x: prices[x]) 按照值取最大,返回key
print(res) B

2.4 在 min 函数中的使用

 min() 函数返回给定参数的最小值.

用法和 max() 一样

2.5 在 sorted 函数中的使用

排序是在程序中经常用到的算法, 如果是数字, 我们可以直接比较. 而如果是字符串或者是dict, 我们就可以用 sorted() 来进行排序.

sorted() 语法:

sorted(Iterable,key = None,reverse = False)

- Iterable: 可迭代的.

- key:排序规则(排序函数). 在sorted内部将可迭代对象的每一个元素传递给这个函数的参考值,根据函数运算的结果进行排序.

- reverse:排序规则. reverse = True 降序 , reverse = False 升序(默认).

举个例子:

# 按绝对值大小排序
>>>sorted([2, 1, -3, 8, -5], key = abs)
[1, 2, -3, -5, 8]

用 lambda 表示就是这样:

>>>sorted([2, 1, -3, 8, -5], key = lambda x: abs(x))
[1, 2, -3, -5, 8]

再来个例子:

# 按照字母长度排序, 如果长度一样, 则按照字母顺序(ASCII)排序.
ret = sorted(['cat', 'bird', 'dog', 'bira', 'animal'], key=lambda x: len(x))
print(ret)
->
['cat', 'dog', 'bird', 'bira', 'animal']

python之匿名函数以及在内置函数中的使用的更多相关文章

  1. python基础知识15---三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数

    阅读目录 一 三元表达式.列表推导式.生成器表达式 二 递归与二分法 三 匿名函数 四 内置函数 五 阶段性练习 一. 三元表达式.列表推导式.生成器表达式 1 三元表达式 name=input('姓 ...

  2. python协程函数、递归、匿名函数与内置函数使用、模块与包

    目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a. ...

  3. python匿名函数 与 内置函数

      一.匿名函数  1.定义: 匿名函数顾名思义就是指:是指一类无需定义标识符(函数名)的函数或子程序. 2.语法格式:lambda 参数:表达式 lambda语句中,开头先写关键字lambda,冒号 ...

  4. Py修行路 python基础 (十三)匿名函数 与 内置函数

    一.匿名函数  1.定义: 匿名函数顾名思义就是指:是指一类无需定义标识符(函数名)的函数或子程序. 2.语法格式:lambda 参数:表达式 lambda语句中,开头先写关键字lambda,冒号前是 ...

  5. python递归-三元表达式-列表生成式-字典生成式-匿名函数-部分内置函数-04

    递归 递归: # 函数在调用阶段直接或间接地又调用了自身 应用场景: # 将列表中的数字依次打印出来(循环的层数是你必须要考虑的点)   -->  l = [1, [2, [3, [4, [5, ...

  6. python之三元表达式、列表推导、生成器表达式、递归、匿名函数、内置函数

    目录 一 三元表达式 二 列表推到 三 生成器表达式 四 递归 五 匿名函数 六 内置函数 一.三元表达式 def max(x,y): return x if x>y else y print( ...

  7. Python 入门基础12 --函数基础5 匿名函数、内置函数

    今日内容: 1.三元表达式 2.列表.元组生成式 | 字典生成式 3.递归 4.匿名函数 5.内置函数 一.三元表达式 三元运算符:就是 if...else... 语法糖 前提:if 和 else # ...

  8. python基础之函数式编程、匿名函数、内置函数

    一 函数式编程 不修改外部状态. 模仿数学里得函数进行编程. 用函数编程写出得代码相当精简. 可读性比较差. 例子: y=2*x+1 x=1 def test(x): return 2*x+1 tes ...

  9. python基础-匿名函数和内置函数

    匿名函数和内置函数 匿名函数:没有名字,使用一次即被收回,加括号就可以运行的函数. 语法:lambda 参数:返回值 使用方式: 将匿名函数赋值给变量,给匿名函数一个名字,使用这个变量来调用(还不如用 ...

随机推荐

  1. 一个xss漏洞到内网漫游【送多年心血打造的大礼包啦!】

    i春秋作家:jasonx 原文来自:一个xss漏洞到内网漫游[送多年心血打造的大礼包啦!] 前言 渗透过程中,有时候遇某些网站,明明检测到有xss漏洞,但是盲打以后,收到的cookie还是不能登录后台 ...

  2. 【Spark调优】聚合操作数据倾斜解决方案

    [使用场景] 对RDD执行reduceByKey等聚合类shuffle算子或者在Spark SQL中使用group by语句进行分组聚合时,经过sample或日志.界面定位,发生了数据倾斜. [解决方 ...

  3. ExternalException (0x80004005): 无法执行程序

    今天更新系统上传到阿里云服务器,报错如下: “/”应用程序中的服务器错误. 组策略阻止了这个程序.要获取详细信息,请与系统管理员联系. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆 ...

  4. Elastic Job学习

    从执行的结果来看,随着服务器的增加,分片的结果也不一样 当只有一台服务器的时候,所有分片都到这一台服务器上 当服务器增加到两台的时候,分片的结果是0 1 2 3 4和5 6 7 8 9 当服务器增加到 ...

  5. Linux编程 19 编辑器(vim 用法)

    一.概述 在开启shell脚本编程之前,必须要知道一款文本编辑器的用法,如文本编辑的查找,剪切,粘贴,定位等, 本篇只讲vim编辑器.vim编辑器全名叫vi improved,是经过对Unix系统vi ...

  6. NET Core 1.1中使用Jwt

    NET Core里Jwt的生成倒是不麻烦,就是要踩完坑才知道正确的生成姿势…… Jwt的结构 jwt的结构是{Header}.{Playload}.{Signature}三截.其中Header和Pla ...

  7. vue的router-link传参问题

    一般来说,可以通过查询字符串的方式将参数传过去,方法如下: <router-link :to="{path:'/Detail', query:{ name: id }}"&g ...

  8. 项目重构之数据源配置与优化:log4j 配置数据库连接池Druid,并实现日志存储到数据库

    作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 365234583] ...

  9. Supervisor使用教程

    在项目中,经常有脚本需要常驻运行的需求.以PHP脚本为例,最简单的方式是: $ nohup php cli.php & 这样能保证当前终端被关闭或者按CRTL+C后,脚本仍在后台运行.但是没法 ...

  10. 向上造型中让我入坑的地方 (><)

    今天周六,闲着蛋疼就报名参加了公司的一个java比赛,比赛地点某某大厦11楼会议室,想象中应该是能容纳上百人的超大会议室.没成想,到地方一看,只是一个能容纳六七人的有圆形会议桌的小会议室.不过这仍然不 ...