大家好,从今天起早起Python将持续更新由小甜同学从 初学者的角度 学习Python的笔记,其特点就是全文大多由 新手易理解 的 代码与注释及动态演示 。刚入门的读者千万不要错过!

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789

为了配合 Python办公自动化 系列文章,本文带来的是 偷学Python第二十四天: Python中匿名函数与内置高阶函数使用,其他内容将在近期更新完毕,本文目录如下

匿名函数

如果我们需要定义一个特别简单的函数,例如

def add(a, b):
s = a + b
return s

这就出现问题了,这么优雅的Python怎么可以出现这种难看的代码呢,有没有办法可以将其简化为1行代码呢?这么优雅的Python肯定有办法将其简化的方法啊!这要用到匿名函数了。P ython中使用   lambda 关键字来创建匿名函数。

lambda [参数1 [,参数2,..参数n]]:表达式

示例代码

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/23
"""
news_add = lambda a, b: a + b
# 上面的那个等于
def news_add_old(a, b):
return a + b x = news_add_old(5, 10)
y = news_add(5, 10) # 调用匿名函数
print(x, y) # 15 15

结合内置函数使用

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/23
""" list1 = [{"a": 10, "b": 20}, {"a": 20, "b": 20}, {"a": 50, "b": 20}, {"a": 6, "b": 20}, {"a": 9, "b": 20}] # 那个列表中的a最大
max_value = max(list1, key=lambda x: x["a"])
print(max_value) # 如果用普通的函数写就多了几行
def func(di):
return di["a"]
max_value = max(list1, key=func) # 这里不能加()不然就表示调用了
print(max_value)

也可以将匿名函数当做参数

def func(a, b, fun):
s = fun(a, b)
return s z = func(5, 10, lambda a, b: a + b)
print(z) # 15

注:lambda可以省去定义函数的过程,让代码更加精简,而且不用考虑命名问题,但是在PEP8规范里面是不推荐用lambda这种方式的

内置函数

map( )

map() 会根据提供的函数对指定序列做映射,使用方法:

map(function, iterable, ...)

第一个参数 function 以参数序列中的每一个元素调用 function 函数, 第二个参 数 iterable 一个或多个序列。其 返回包含每次 function 函数返回值的新列表。

示例代码

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/23
"""
list1 = [1, 2, 4, 5, 56, 12, 5, 2, 34] # 生成一个函数
def func(lt): # 将偶数返回,奇数+1返回
if lt % 2 == 0:
return lt
else:
return lt + 1 list2 = map(func, list1) # 千万不能加()
# 使用lambda关键字
list3 = map(lambda i: i if i % 2 == 0 else i + 1, list1)
print(list(list3)) # [2, 2, 4, 6, 56, 12, 6, 2, 34]
print(list(list2)) # [2, 2, 4, 6, 56, 12, 6, 2, 34]

reduce( )

reduce() 函数在Python2.x的时候是系统内置的函数,到Python3.x就已经归入functools库里面了。

reduce() 函数会对参数序列中元素进行累 积。 函数将一个数据集合(链表,元组等)中的所有数据进行下列操作: 用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

reduce(function, iterable[, initializer])

示例代码

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/23
"""
from functools import reduce list1 = [1, 2, 3, 4, 5, 6, 7]
value = reduce(lambda x, y: x + y, list1)
print(value) # 28 = 1+2+3+4+5+6+7

执行流程即 将计算结果存储到x,每次累计。initializer就是设置x的初始值,演示如下

filter( )

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

该方法接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

filter(function, iterable)

sorted( )

sorted()   函数对所有可迭代的对象进行排序操作,返回的是一个新的 list.返回重新排序的列表。

sorted(iterable, cmp=None, key=None, reverse=False)
  • iterable – 可迭代对象。

  • cmp – 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。

  • key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

  • reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

示例代码

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/23
"""
students = [
{'name': 'tom', 'age': 20},
{'name': 'lucy', 'age': 15},
{'name': 'lily', 'age': 13},
{'name': 'mark', 'age': 21},
{'name': 'jack', 'age': 13},
{'name': 'steven', 'age': 18},
] # 找出所有年龄大于18岁学生
result = filter(lambda x: x['age'] > 18, students)
print(list(result)) # [{'name': 'tom', 'age': 20}, {'name': 'mark', 'age': 21}] # 按照年龄从小到大排序
students = sorted(students, key=lambda x: x['age'], reverse=True) # 利用key print(students)
'''
[{'name': 'mark', 'age': 21}, {'name': 'tom', 'age': 20},
{'name': 'steven', 'age': 18}, {'name': 'lucy', 'age': 15},
{'name': 'lily', 'age': 13}, {'name': 'jack', 'age': 13}]
'''

Python中匿名函数与内置高阶函数详解的更多相关文章

  1. python(内置高阶函数)

    1.高阶函数介绍: 一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),如果满足其一,则为高阶函数. 常见的高阶函数:map().sorted( ...

  2. 匿名函数python内置高阶函数以及递归

    匿名函数 python定义一个函数通常使用def关键词,后面跟函数名,然后是注释.代码块等. def func(): '''注释''' print('from func') 这样就在全局命名空间定义了 ...

  3. Python内置高阶函数map()

    map()函数map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. 例如,对于lis ...

  4. python面试_总结01_概念和内置高阶函数

    - 简答题 1.请谈谈Python中is 和 == 的区别(代码演示) is用于比较两个变量是否引用了同一个内存地址,is表示的是对象标识符(object identity),作用是用来检查对象的标识 ...

  5. 关于python中str数据类型的内置常用方法(函数)总结

    str基本数据类型常用功能 center(self,width,fllchar=none)                        内容居中,width表示总长度,fllchar表示空白处默认为 ...

  6. reduce内置高阶函数求和

    >>> def f(x, y): ... return x+y ... >>> reduce(f, a, ) >>> reduce(lambda ...

  7. 【python】dir(__builtins__)查看python中所用BIF(内置函数)

    dir(__builtins__)查看python中所用BIF(内置函数)

  8. python学习笔记1 -- 函数式编程之高阶函数 filter

    filter 函数用于过滤序列,与map 和reduce函数类似,作为高阶函数,他们也是同样的使用方法,filter(参数1, 参数2),参数1是一个函数,而参数2是一个序列. filter的作用是根 ...

  9. python中的作用域以及内置函数globals()-全局变量、locals()-局部变量

    在python中,函数会创建一个自己的作用域,也称为为命名空间.这意味着在函数内部访问某个变量时,函数会优先在自己的命名空间中寻找. 通过内置函数globals()返回的是python解释器能知道的变 ...

随机推荐

  1. VulnHub::DC-1

    实验环境 一共有五个flag,有多种方法去提权,我们最终目标是去拿到/root的flag.总的来说,难度不高,适合新人练手 渗透过程 0x01 信息搜集 由于不知道靶机IP地址,进行D段扫描,获得靶机 ...

  2. 04 drf源码剖析之版本

    04 drf源码剖析之版本 目录 04 drf源码剖析之版本 1. 版本简述 2. 版本使用 3.源码剖析 4. 总结 1. 版本简述 API版本控制使您可以更改不同客户端之间的行为.REST框架提供 ...

  3. kubernetes系列(十六) - Helm安装和入门

    1. helm简介 1.1 为什么需要helm 1.2 helm中几个概念 1.3 helm用途 2. helm安装 3. helm的基本使用 3.1 安装chart仓库里面的chart 3.2 创建 ...

  4. Ethical Hacking - GAINING ACCESS(2)

    Server Side Attacks - INFORMATION GATHERING Need an IP address. Very simple if target is on the same ...

  5. 02 安装net-tools工具

    01 登录虚拟机,没错,还是那个熟悉的黑窗口 02 输入用户名密码(我还是习惯使用root用户,因为,它可以为所欲为) 小知识:注意红色框内的符号: 一般用户为限制用户,符号为:$ 超级用户,为无限制 ...

  6. 搭建高可用kubernetes集群(keepalived+haproxy)

    序 由于单master节点的kubernetes集群,存在master节点异常之后无法继续使用的缺陷.本文参考网管流程搭建一套多master节点负载均衡的kubernetes集群.官网给出了两种拓扑结 ...

  7. Residual Attention Network for Image Classification(CVPR 2017)详解

    一.Residual Attention Network 简介 这是CVPR2017的一篇paper,是商汤.清华.香港中文和北邮合作的文章.它在图像分类问题上,首次成功将极深卷积神经网络与人类视觉注 ...

  8. CSS 技巧一则 -- 不定宽溢出文本适配滚动

    在日常布局当中,肯定经常会遇到文本内容超过容器的情况.非常常见的一种解决方案是超出省略. 但是,有的时候,由于场景的限制,可能会出现在一些无法使用超出打点省略的方法的场景,譬如在导航栏中: 这种情况下 ...

  9. cpp求职

    //Created by Arc on 2020/5/23 //////// Created by snnnow on 2020/5/20.//////面向对象的程序设计-期中测试// 根据题目实现求 ...

  10. c语言大小写转化函数(包括字母和字符串)

    本憨憨忘了好几次了,这次一定记住他们! 首先大小写相差32.转换的话自己写函数也是可以写出来的. 1.字母 如果是字母转的话,用toupper(),tolower() 头文件是<ctype.h& ...