Py编程方法,尾递归优化,map函数,filter函数,reduce函数
函数式编程
1.面向过程
把大的问题分解成流程,按照流程来编写过程
2.面向函数
面向函数编程=编程语言定义的函数+数学意义上的函数
先弄出数学意义上的方程式,再用编程方法编写这个数学方程式
注意面向函数的是不能在函数内进行赋值操作的,有赋值操作的全部是面向过程的方法
示例(函数式编程是直接传递函数,把函数作为参数传给另一个参数,不用赋值操作)
def foo(n):
print(n)
def bar(name):
return('my name is %s' %name)
foo(bar('abc'))
高阶函数定义:函数接收的参数是一个函数名 或者 返回值中包含函数
3.面向对象
尾递归的优化:
由于函数是要等此部分函数执行完成后才会释放前面那部分函数所占用的内存。递归如果
没有终止条件,不断调用时将会导致前面每次的调用的内存无法被释放,撑爆内存。
比如
def test():
print('1111')
test()
print('1111')
可以看见调用递归步骤的那一步并不是结尾句,下一步还有print111,因此函数没有结束
将会导致上一次递归的内存无法被释放,然后会撑爆内存因此要用尾调用
尾调用:在函数的最后一步来调用下一次递归,注意尾调用return的必须是原函数
map函数
针对将1,5,10这三个数需要将他们取平方
num_l=[1,5,10]
ret=[]
for i in num_l:
ret.append(i**2)
print(ret)
对其进行函数的封装:
num_l=[1,5,10]
def map_test(arry):
ret=[]
for i in num_l:
ret.append(i**2)
return ret
readback=map_test(num_l)
print(readback)
以上的方法过于冗长,因此介绍内置函数map()
写法map(处理方法,一个可迭代对象(比如说列表))
map会把可迭代对象里面的值一个一个拿出来然后用前面的处理方法来处理
num_l=[1,5,10]
res= map(lambda x:x**2,num_l)
for i in res:
print(i)
#或者直接将它使用list变成一个数组
num_l=[1,5,10]
res= map(lambda x:x**2,num_l)
print(list(res))
filter函数
场景任务:有几个人,找出其中不是sb的人
moviel=['sbalex','sb2','sb3','aaab']
ret=[]
for i in moviel
if not i.stratswith('sb')
ret.append(i)
print(ret)
可以用filter函数优化,主要用于筛选对象
filter写法:filter(处理方法然后逻辑判断,可迭代对象(可以是列表))
将可迭代对象里面的每一个逐个放出来进行方法处理然后逻辑判断,如果逻辑判断之后
是true的保留,不是true的不保留
moviel=['alex','sb1','sb2','sb3']
res=filter(lambda n:n.startswith('sb'),moviel)
print(list(res))
示例2:
将列表里的千年王八万年龟人去除掉
people=[
{'name':'alex','age':1000},
{'name':'wupeiqi','age':10000},
{'name':'yuanhao','age':9000},
{'name':'zqh','age':18}
]
print(list(filter(lambda p:p['age']<=999,people)))
reduce函数
场景任务:把[1,2,3,100]里面的数字乘起来。
num=[1,2,3,100]
def multi(x,y):
return x*y
def reduce_test(func,array):
res=1
for num in array:
res=func(res,num)
return res
print(reduce_test(multi,num))
可以使用reduce函数来进行优化
reduce作用,可以将一大堆数据压缩到一起(合并序列),得到一个最终的结果。
使用时需要先进行导入from functools import reduce
示例:
from functools import reduce
numl=[1,2,3,100]
print(reduce(lambda x,y:x+y,numl))
Py编程方法,尾递归优化,map函数,filter函数,reduce函数的更多相关文章
- python_08 函数式编程、高阶函数、map、filter、reduce函数、内置函数
函数式编程 编程方法论: 1.面向过程 找到解决问题的入口,按照一个固定的流程去模拟解决问题的流程 (1).搜索目标,用户输入(配偶要求),按照要求到数据结构内检索合适的任务 (2)表白,表白成功进入 ...
- python学习-day16:函数作用域、匿名函数、函数式编程、map、filter、reduce函数、内置函数r
一.作用域 作用域在定义函数时就已经固定住了,不会随着调用位置的改变而改变 二.匿名函数 lambda:正常和其他函数进行配合使用.正常无需把匿名函数赋值给一个变量. f=lambda x:x*x p ...
- python学习-day15:函数作用域、匿名函数、函数式编程、map、filter、reduce函数、内置函数r
---恢复内容开始--- 一.全局变量与局部变量 在子程序中定义的变量称为局部变量, 在程序的一开始定义的变量称为全局变量. 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序.当全局变量与 ...
- Python的map、filter、reduce函数 [转]
1. map函数func作用于给定序列的每个元素,并用一个列表来提供返回值. map函数python实现代码: def map(func,seq): mapped_seq = [] fo ...
- python中的map、filter、reduce函数
三个函数比较类似,都是应用于序列的内置函数.常见的序列包括list.tuple.str. 1.map函数 map函数会根据提供的函数对指定序列做映射. map函数的定义: map(function ...
- map、filter、reduce函数的使用
1.filter() 作用:过滤 // 1.筛选出大于30的数. const array = [10, 20, 30, 40, 50, 60, 70, 80] // 普通写法 // let newar ...
- map、filter、reduce函数
map #函数需要⼀个参数 m1 = map(lambda x:x*x,[1,2,3]) print(list(m1)) #函数需要两个参数 m2 = map(lambda x,y:x+y,[1,2, ...
- Map、Filter和Reduce函数(Python)
Map map(function_to_apply, list_of_inputs) 设有以下代码: >>> items = [1, 2, 3, 4, 5] >>> ...
- python的map,filter,reduce学习
python2,python3中map,filter,reduce区别: 1,在python2 中,map,filter,reduce函数是直接输出结果. 2,在python3中做了些修改,输出前需要 ...
- Swift函数编程之Map、Filter、Reduce
在Swift语言中使用Map.Filter.Reduce对Array.Dictionary等集合类型(collection type)进行操作可能对一部分人来说还不是那么的习惯.对于没有接触过函数式编 ...
随机推荐
- Java项目连接数据库Mysql报错create connection SQLException
今天编写了一个Java项目,对数据库Mysql的表进行增删改查,然后遇到了这个问题 严重: create connection SQLException, url: jdbc:mysql://loca ...
- 只要肯下功夫,十岁也能学得会的 Docker 精简版!
目录 一.Docker简介 1.1 什么是Docker 1.2 Docker中包括三个基本的概念 1.3 Docker组件 1.4 安装Docker 二.Docker常用命令 三.应用部署 3.1 m ...
- 使用docker-maven-plugin打包
今天在部署的时候遇到点问题,总结一下,docker部署的步骤,如果对您有帮助,关注一下,就是对我最大的肯定, 谢谢! 微服务部署有两种方法: (1)手动部署:首先基于源码打包生成jar包(或war包) ...
- 使用轮询&长轮询实现网页聊天室
前言 如果有一个需求,让你构建一个网络的聊天室,你会怎么解决? 首先,对于HTTP请求来说,Server端总是处于被动的一方,即只能由Browser发送请求,Server才能够被动回应. 也就是说,如 ...
- Django中ORM的使用
Django中ORM的使用 ORM orm(object-relation-mapping)对象关系映射,即用对象来表示关系数据库中的表: 类 --> 表, 对象-->一行数据 对象的属性 ...
- 作为Java新手,如何才能快速的看透一个Java项目?
前言 技术学习是一个总结.纠错.触类旁通的过程,而不是单纯重复练习的过程,如果你问一个做过5年以上Java的老码农,他们很多人都会有很强的"搬砖感",这种"搬砖感&quo ...
- 中小学生的噩梦:怎样用Python检测抄袭行为?广大中小学生们的美梦就此结束
本教程将介绍如何使用机器学习技术(如word2vec和余弦相似度等),在Python中用几行代码制作抄袭检测器.搭建完成后,抄袭检测器将会从文件中载入学生们的作业,然后通过计算相似度来判断学生有无相互 ...
- 图解Python中深浅拷贝
在工作中,常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修改的问题.为了防止数据被修改,就需要在传递一个副本,即使副本被修改,也不会影响原数据的使用.为了生成这个副本,就产生了拷贝.今天就 ...
- Python制作折线图
利用python的第三方包Pygal制作简单的折线图. 申明:本文仅供学习交流使用.源码大部分来自<python编程从入门到实践>:如有侵权,请联系我删除. 1 #!usr/bin/env ...
- 【进程/作业管理】篇章四:Linux任务计划、周期性任务执行
命令归纳: at 未来时间点让特定任务运行一次 batch 未来时间点让系统自行选择在系统资源较空闲的时间去执行指定的任务 corn 周期性任务计划(corntad) at命令详解 <--- 假 ...