目录

函数即变量

lambda关键字定义匿名函数

高阶函数

内置函数map

内置函数filter

内置函数reduce

内置函数看文档


函数即变量

书接上回,Python里面,函数就是变量,可以被当成普通变量一样作为返回值,调用。

def foo():print("from foo")passdef bar():print("from bar")return foot = bar()
t()
bar()()

甚至,可以返回函数自己。

def foo():print("from foo")return foofoo()()()()()()

lambda关键字定义匿名函数

用lambda关键字,可以定义函数,而没有函数名。这里为了举例方便,我们将lambda定义的函数赋值给一个变量。但是实际上,lambda表达式不是这么用的。

foo = lambda x: x + 1
t = foo(2)
print(t)

lambda定义匿名函数,可以返回多个值,但是要手动写成元组的形式。

foo = lambda x, y, z: (x + 1, y + 1, z + 1,)
t = foo(1, 2, 3)
print(t)
# (2, 3, 4)

高阶函数

函数的参数是函数名或者函数的返回值是函数名,这个函数就是高阶函数。

比如,需要写一个函数可以对一个列表的元素做操作。这个函数的操作是固定的,如果操作变了,那么要重新定义新的函数。

n = [1, 2, 3, 4]def num_add(n):"""对列表每个元素加1:param n::return:"""res = []for i in n:res.append(i + 1)passreturn res# [2, 3, 4, 5]
print(num_add(n))def num_sub(n):"""对列表每个元素减1:param n::return:"""res = []for i in n:res.append(i - 1)passreturn res# [0, 1, 2, 3]
print(num_sub(n))def num_square(n):"""对列表每个元素平方:param n::return:"""res = []for i in n:res.append(i ** 2)passreturn res# [1, 4, 9, 16]
print(num_square(n))

为此,我们可以将对列表元素的操作,作为函数参数传递给这个函数。这样,就可以使函数的操作灵活多样。

n = [1, 2, 3, 4]def add_one(x):return x + 1def sub_one(x):return x - 1def square(x):return x ** 2def num_op(n, op):res = []for i in n:res.append(op(i))passreturn res# [2, 3, 4, 5]
# [0, 1, 2, 3]
# [1, 4, 9, 16]
print(num_op(n, add_one))
print(num_op(n, sub_one))
print(num_op(n, square))

甚至,我们可以传入一个lambda表达式,省去定义函数的步骤。

n = [1, 2, 3, 4]def num_op(n, op):res = []for i in n:res.append(op(i))passreturn res# [2, 3, 4, 5]
# [0, 1, 2, 3]
# [1, 4, 9, 16]
print(num_op(n, lambda x: x + 1))
print(num_op(n, lambda x: x - 1))
print(num_op(n, lambda x: x ** 2))

内置函数map

对于上面所说高阶函数,有一个Python内置函数map可以简单的实现上述功能。并且是函数式编程哦。

map接收两个参数,第一个是函数(一般传入匿名函数),第二个是迭代器,返回迭代器。map函数对传入的迭代器遍历,用传入的函数逐个处理,返回迭代器需要自己转换成需要的数据类型。

n = [1, 2, 3, 4]
res1 = list(map(lambda x: x + 1, n))
res2 = list(map(lambda x: x - 1, n))
res3 = list(map(lambda x: x ** 2, n))
# [2, 3, 4, 5]
# [0, 1, 2, 3]
# [1, 4, 9, 16]
print(res1, res2, res3, sep="\n")# 用map函数对多个字符串列表做对应拼接
s1 = ['cn', 'us', 'uk']
s2 = ['ca', 'jp', 'kk']
s3 = ['11', '22', '33']res = list(map(lambda x, y, z: x + y + z, s1, s2, s3))
print(res)
# ['cnca11', 'usjp22', 'ukkk33']

内置函数filter

filter的逻辑和map类似,功能和名字filter一样——过滤。filter接收两个参数,第一个是函数(一般是匿名函数,返回值是布尔值),第二个是迭代器,返回迭代器。filter函数对传入的迭代器遍历,用传入的函数逐个判断,如果是True保留,如果是False去掉,返回迭代器需要自己转换成需要的数据类型。

# 找出下面列表里包含字母g的字符串
s = ["Able", "Baker", "Charlie", "Dog", "Easy", "Fox", "George"]
res = list(filter(lambda x: x.casefold().find("g") != -1, s))
print(res)
# ['Dog', 'George']

筛选操作系统是linux,数据库是mysql的系统。

system = [{"os": "windows", "db": "oracle", "app": "sap"},{"os": "linux", "db": "mysql", "app": "apache"},{"os": "windows", "db": "db2", "app": "nginx"},{"os": "linux", "db": "oracle", "app": "sap"},
]# 过滤出操作系统是linux,数据库是mysql的系统
res = list(filter(lambda x: x.get("os") == "linux" and x.get("db") == "mysql", system))
print(res)
# [{'os': 'linux', 'db': 'mysql', 'app': 'apache'}]

内置函数reduce

在Python3以后,reduce函数被放在functools包里面,如果要使用的话需要from functools import reduce。

reduce对于迭代器做操作,接收三个参数,第一个是函数(一般是匿名函数),第二个是迭代器,第三个是可选参数给定的初始值,返回一个结果。以对数列求和、求积为例。

from functools import reducea = [1, 2, 3, 100]sum_a = reduce(lambda x, y: x + y, a)
multi_a = reduce(lambda x, y: x * y, a)
print(sum_a, multi_a)
# 106 600sum_a = reduce(lambda x, y: x + y, a, 100)
multi_a = reduce(lambda x, y: x * y, a, 100)
print(sum_a, multi_a)
# 206 60000

内置函数看文档

Python的内置函数还有很多,不可能一一描述,最好是看官方文档。

下载Docs的地址是https://docs.python.org/3/download.html

Python基础11-函数式编程与内置函数相关推荐

  1. day16——函数式编程和内置函数

    编程的方法论 面向过程:找到问题的 函数式:不可变.不用变量保存状态.不修改变量 面向对象: 高阶函数: 满足俩个特性任意一个即为高阶函数 1.函数的传入参数是一个函数名 2.函数的返回值是一个函数名 ...

  2. Python基础(五)---python3中的内置函数

    python3中的常用内置函数 input()函数: 在终端打印括号中的消息,等待用户输入信息,然后将输入值返回并存储在内存中 例如: name = input("What's your n ...

  3. python常用内置函数乘法_每个 Python 高手都应该知道的内置函数

    每个 Python 高手都应该知道的内置函数 Python 将纳入高中教材,大学 VB 将被 Python 取代, 现在你还对 Python 一无所知吗?去年就被国外一机构预测, 2017 年 pyt ...

  4. Python中10个常用的内置函数

    大家好,我是小张 在 3.8 版本中,Python 解释器共有近 69 个内置函数可供使用,有了它们能极大地提高编码效率, 数量虽然不少,但在日常搬砖中只用到其中一部分,根据使用频率和用法,列出来几个 ...

  5. Python培训教程:Python有哪些比较重要的内置函数?

    学习Python技术或者参加Python工作的小伙伴们应该都知道,在Python编程语言中会经常出现很多内置函数,很少有人清楚这些函数,但是它的功能是不可小觑的,下面小编就为大家详细介绍一下Pytho ...

  6. python学习之最常用的内置函数

    python学习之最常用的内置函数 Python 内置函数总共有70余个(通常把内置类也统称为内置函数),覆盖面广,功能强大.不过,对于初学者在初级阶段,掌握下面几个函数是当务之急. (1) 控制台输 ...

  7. python基础(part17)--函数式编程

    鄙人学习笔记 开发工具:Spyder 文章目录 函数式编程 举个例子1 举个例子2 举个例子3 函数作为参数 lambda表达式 举个例子1 内置高阶函数 filter map sorted max ...

  8. python编程内置函数使用方法_python编程(4)--内置函数

    ​     函数,通常称为方法,是一种将自变量到因变量的映射(y = f(x)).在python里用def或者lambda去构造,语法如下. def f(x):      #x -- 输入 y = x ...

  9. 递归函数合式分解python_学习python的day10之递归与内置函数

    一.递归 递归的特点: 函数内部自己调用自己 必须出口 需求:求3以内的累加和 defsum(a):if a == 1:return 1 return a+sum(a-1) result= sum(3 ...

最新文章

  1. 前端攻城狮学习笔记七:常见前端面试题之HTML/CSS部分(二)
  2. [转]Oh My Zsh,安装,主题配置
  3. python animation set data_imshow.set_数据()不适用于FuncAnimation
  4. 数学打比方(函数和卷积)
  5. HDOJ 5087 Revenge of LIS II DP
  6. 前端调数据会经常用到的事件处理
  7. 【linux(2),Redis面试复习大纲在手面试不慌
  8. 用R做数据分析(1)——R简介
  9. lodop指定打印机打印_2020年打印机推荐选购,看这篇就够了
  10. utf-8、UTF-8、utf8 在使用中的区别
  11. 学习数据库系统概论这一篇就够了
  12. ntko php,NTKO OFFICE文档控件
  13. 优化后亲测可用!免费下载QQ音乐大部分资源
  14. AssertionError: Incompatible version of pycocotools is installed.
  15. bat学习(二)快速批量建立指定三级文件夹
  16. SEGGER调试利器RTT,替代串口,高速数据上传
  17. 多屏信号服务器,多屏图像拼接处理器 多种信号输出输入
  18. python 导入本地模块包失败的解决方案
  19. 视频素材-高质量缥缈雾气雾霾特效合成动画 Lens Distortions – Fog II
  20. 踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(1)...

热门文章

  1. npm全局环境变量配置,全局配置cnpm
  2. [微信小程序]时间戳转日期
  3. 【Android 基础】Animation 动画介绍和实现
  4. 【FE前端学习】第二阶段任务-基础
  5. Linux技巧总结(个人经验版)
  6. 如何通过参数来切换图表和数据
  7. 提升对ASP.NET网站性能和多并发的设计的讨论
  8. 新春祝福必杀计之发送短信攻略
  9. VIM 必知必会12大类型操作
  10. WinCE中命令行工具Viewbin简介(查看nk.bin中包含的文件)