一. 匿名函数

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. LeetCode题解33.Search in Rotated Sorted Array

    33. Search in Rotated Sorted Array Suppose an array sorted in ascending order is rotated at some piv ...

  2. linux创建用户并设置密码

    1.在root权限下,useradd只是创建了一个用户名,如(useradd+用户名),它并没有在/home目录下创建同名文件夹,也没有创建密码,因此利用这个用户登录系统,是登录不了的,为了避免这样的 ...

  3. Spring Cloud Config采坑记

    1. Spring Cloud Config采坑记 1.1. 问题 在本地运行没问题,本地客户端服务能连上本地服务端服务,可一旦上线,发现本地连不上线上的服务 服务端添加security登录加密,客户 ...

  4. java核心技术-(总结自杨晓峰-java核心技术36讲)

    1. 谈谈你对java平台的理解 首先是java最显著的两个特性,一次写入处处运行:还有垃圾收集器gc,gc能够对java内存进行管理回收,程序员不需要关心内存的分配和回收问题 然后谈谈jre和jdk ...

  5. Python 函数中参数的分类及使用

    ######################非固定参数################## #第一种方式:def send_alert(msg,*users):##*users 是非固定参数,将传过来 ...

  6. 安卓ListView行详细内容展示页编写和下拉刷新实现

    ListView行详细内容展示页: 使用轻量级的Fragment实现Listview行内容简单的详细信息展示: 值得注意的是: 1. 主布局(打开它的Activity)必须是FrameLayout布局 ...

  7. Android中设置控件的背景颜色的方式整理

    版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 在Android开发中,经常需要设置控件的背景颜色或者图片的src颜色. 效果图 代码分析 根据使用的方法不同,划分为 setBackgro ...

  8. 我看C#的Equals()和GetHashCode()方法

    首先先谈一下Equals()这个方法: Equals()方法,来自于Object,是我们经常需要重写的方法.此方法的默认实现大概是这样的: public virtual bool Equals(obj ...

  9. ①泡茶看数据结构-表ADT

    前言     小朽,晚上回到寝室.烧了开水,又泡了一杯下午喝了的小毛尖.耳机听着萨克斯,总结下今天学的数据结构和算法中的表ADT.       表ADT节点: #单链表   #双链表   #循环链表 ...

  10. AspectJ在Spring中的使用

    在上一篇AspectJ的入门中,简单的介绍了下AspectJ的使用,主要是以AspectJ的example作为例子.介绍完后也留下了几个问题:1)我们在spring中并没有看到需要aspectj之类的 ...