python学习——高阶函数
递归函数
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。使用递归函数的优点是逻辑简单清晰,缺点就是过深的调用会导致栈溢出。但是针对尾递归优化的语言可以通过尾递归防止栈溢出。尾递归事实上和循环是等价的,没有循环语句的编程语言只能通过尾递归实现循环。
"""尾递归"""
# 尾递归是指在函数返回的时候,调用自身本身,并且return语句不能包含表达式。 def fact(n):
return fact_iter(n, ) def fact_iter(num, product):
if num == :
return
return fact_iter(num-, num*product) """普通递归""" def fact1(n):
if n == :
return
return n*fact(n-)
匿名函数:lambda
除了def语句外,python还提供了一种生成函数对象的表达式。就像def一样,这个表达式创建了一个之后能调用的函数,但是他返回了一个函数而不是将这个函数赋值个一个变量。这也就是lambda有时叫做匿名函数的原因。实际上,他们常常以一种行内进行函数定义的形式使用,或者用作推迟执行一些代码。lambda可作为def的速写。
"""lambda匿名函数操作""" # lambda返回一个函数,可以赋值各变量,通过变量进行函数调用
f = lambda x: x * x
f() # lambda 通常用来编写跳转表。也就是行为的列表或字典,能够按照需要执行相应的动作
L = [lambda x: x ** ,
lambda x: x ** ,
lambda x: x ** ]
# 遍历函数列表
for f in L:
print(f()) # 指定特定函数执行
print(L[]()) # 同时lambda也可与字典嵌套可以构建更多种类的行为表。
在序列中映射函数:map
程序对列表和其他序列常常要做的一件事就是对每个元素进行一个操作并把其结果集合起来。map函数会对一个序列对象中的每一个元素应用被传入的函数,并且返回一个包含了所有函数调用结果的一个列表。但是python3map是一个可迭代对象,他的返回值为一个迭代器,因此在这里,一个列表(list())调用用来迫使他生成所有的结果以显示。
"""map函数操作""" L = [, , , ] s = map((lambda x: x ** x), L) # map函数可以通过next()进行调用,同时可以使用list()强制将其转化为列表。
print(next(s))
print(list(s))
函数式编程工具:filter和reduce
在python内置函数中,map函数是用来进行函数式编程的这类工具中最简单的内置函数代表:函数式编程的意思是对序列应用一些函数的工具。例如,基于某一测试函数过滤出一些元素(filter),以及对每队元素都应用函数并运行到最后结果(reduce)。由于range和filter都返回可迭代对象,在python3中他们需要list调用来显示其所有结果。
"""filter函数操作""" """
filter函数用于过滤序列,和map一样接受一个函数和一个列表。
和map不同的是filter把传入的函数依次作用于每个元素,然后根据
返回值时True还是False决定保留还是丢弃。
""" # 在一个list中删掉偶数 def is_odd(n):
return n % ==
list(filter(is_odd, [, , , , , ])) """reduce函数操作""" """
reduce把一个函数作用在一个序列[x1, x2, x3, ...]上这个函数
必须接受两个参数,reduce把结果继续和序列的下一个元素做累积计算
"""
# 例如:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2),x3),x4) from functools import reduce def add(x, y):
return x + y print(reduce(add, [, , , ]))
python学习——高阶函数的更多相关文章
- Python学习---高阶函数的学习
高阶函数 高阶函数:函数名可以作为参数传递输入,函数名还可以作为返回值返回 函数名可以重新赋值,因为其本身就是一个变量 函数本身就是一个对象, 函数的变量名f本身就是指向函数本身的,加上括 ...
- Python 学习——高阶函数 filter 和 sorted
filter filter函数顾名思义,筛选,通过调用函数进行筛选序列中的满足函数的子项 以实例来说话: 过滤一个序列中所有的偶数,保留奇数 另如下,过滤掉一个序列中的所有空格以及空字符等信息 可以知 ...
- python基础——高阶函数
python基础——高阶函数 高阶函数英文叫Higher-order function.什么是高阶函数?我们以实际代码为例子,一步一步深入概念. 变量可以指向函数 以Python内置的求绝对值的函数a ...
- Haskell学习-高阶函数
原文地址:Haskell学习-高阶函数 高阶函数(higher-order function)就是指可以操作函数的函数,即函数可以作为参数,也可以作为返回结果.有了这两个特性,haskell可以实现许 ...
- Python的高阶函数小结
一. 高阶函数定义 简而言之,Python的高阶函数就是指一个函数作为参数传递给另外一个函数的用法. 举一个最简单的高阶函数来说明: >>> def add(x,y,f): retu ...
- python之高阶函数--map()和reduce()
以下为学习笔记:来自廖雪峰的官方网站 1.高阶函数:简单来说是一个函数里面嵌入另一个函数 2.python内建的了map()和reduce()函数 map()函数接收两参数,一个是函数,一个是Iter ...
- python的高阶函数(map,filter,sorted,reduce)
高阶函数 关注公众号"轻松学编程"了解更多. 1.MapReduce MapReduce主要应用于分布式中. 大数据实际上是在15年下半年开始火起来的. 分布式思想:将一个连续的字 ...
- Python笔记-高阶函数
1.函数式编程 函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量. 函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! 传入函数 既然 ...
- python之高阶函数和匿名函数
map() map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回. def func(x): return ...
随机推荐
- Salesforce Admin篇(三) Delegated Administrator
项目中,我们可能会遇见以下的场景. 1. HR 经理针对申请者和工作相关的表的app会经常需要修改布局查看需要的页面的字段: 2. 开发者将record type对应的picklist values等 ...
- Aspnet Mvc 前后端分离项目手记(四)vue项目的搭建(一)(iview)
一项目创建 1,搭建vue-cli脚手架(依赖npm) 没有安装npm的同学,请先使用npm install -g vue-cli ,然后再进行这一步 安装的过程中有几项 ? Project name ...
- linux初学者-虚拟机管理篇
linux初学者-虚拟机管理篇 之前已经介绍过,在linux系统的学习中,一般需要在虚拟机中进行操作,但是虚拟机是如何安装的呢?又是如何管理的呢?下文将对虚拟机的安装和管理进行一个简要的介绍. 1.虚 ...
- 01 | 健康之路 kubernetes(k8s) 实践之路 : 开篇及概况
近几年容器相关的技术大行其道,容器.docker.k8s.mesos.service mesh.serverless等名词相信大家多少都有听过,国内互联网公司无一不接触和使用相关技术. 健康之路早在2 ...
- 【iOS】设备系统版本
判断 iOS 系统的版本号,示例代码如下: NSLog(@"version--%d", [[[UIDevice currentDevice] systemVersion] floa ...
- Android Studio 制作简单的App欢迎页面——基于Android 6.0
在许多的Android App中,我们点击进入时,都可以看到一个欢迎页面,大概持续了几秒,然后跳转至主页面.以下是我开发过程中总结出的一些方法和例子. 一.创建一个新的Activity 首先,新建了一 ...
- .NET读写DBF
C# 读写DBF分为两种模式,一种为OLEDB驱动,需要安装一个文件“VFPOLEDBSetup.msi”: 一种为Odbc模式,这种几乎上不需要安装Odbc驱动 我这边用的是第一种. /// < ...
- 【Python】Django【邮箱验证】 后端验证如何生成 token加密验证码 与如何解码!!!!
1.生成token验证码方案 ,使用itsdangerous 大宝剑, 可以序列化出验证码,并能设置过期时间 安装 itsdangerous pip install itsdangerous ...
- 如何确定FPGA电路中DDR4的Speed bin 是否兼容?
原创 by DeeZeng DDR4 是否兼容,拿更快速度的DDR4,是否可以不改FPGA工程,直接换料就能直接用? 实际工作中,经常会碰到因为DDR3/4 或其他料件换料了,需要判断FPGA工程中I ...
- Linux故障处理最佳实践
引言 业务中断了! 老板咆哮,主管抓狂,而你就是那个要去处理故障.恢复业务的不幸的人. 你独自一人在阴暗的隔间里.北边是老板的办公室,西边是Team Leader的办公室,南面是茶水间,在那你能泡上一 ...