函数式编程

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函数的更多相关文章

  1. python_08 函数式编程、高阶函数、map、filter、reduce函数、内置函数

    函数式编程 编程方法论: 1.面向过程 找到解决问题的入口,按照一个固定的流程去模拟解决问题的流程 (1).搜索目标,用户输入(配偶要求),按照要求到数据结构内检索合适的任务 (2)表白,表白成功进入 ...

  2. python学习-day16:函数作用域、匿名函数、函数式编程、map、filter、reduce函数、内置函数r

    一.作用域 作用域在定义函数时就已经固定住了,不会随着调用位置的改变而改变 二.匿名函数 lambda:正常和其他函数进行配合使用.正常无需把匿名函数赋值给一个变量. f=lambda x:x*x p ...

  3. python学习-day15:函数作用域、匿名函数、函数式编程、map、filter、reduce函数、内置函数r

    ---恢复内容开始--- 一.全局变量与局部变量 在子程序中定义的变量称为局部变量, 在程序的一开始定义的变量称为全局变量. 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序.当全局变量与 ...

  4. Python的map、filter、reduce函数 [转]

    1. map函数func作用于给定序列的每个元素,并用一个列表来提供返回值. map函数python实现代码: def map(func,seq): mapped_seq = []        fo ...

  5. python中的map、filter、reduce函数

    三个函数比较类似,都是应用于序列的内置函数.常见的序列包括list.tuple.str.   1.map函数 map函数会根据提供的函数对指定序列做映射. map函数的定义: map(function ...

  6. map、filter、reduce函数的使用

    1.filter() 作用:过滤 // 1.筛选出大于30的数. const array = [10, 20, 30, 40, 50, 60, 70, 80] // 普通写法 // let newar ...

  7. 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, ...

  8. Map、Filter和Reduce函数(Python)

    Map map(function_to_apply, list_of_inputs) 设有以下代码: >>> items = [1, 2, 3, 4, 5] >>> ...

  9. python的map,filter,reduce学习

    python2,python3中map,filter,reduce区别: 1,在python2 中,map,filter,reduce函数是直接输出结果. 2,在python3中做了些修改,输出前需要 ...

  10. Swift函数编程之Map、Filter、Reduce

    在Swift语言中使用Map.Filter.Reduce对Array.Dictionary等集合类型(collection type)进行操作可能对一部分人来说还不是那么的习惯.对于没有接触过函数式编 ...

随机推荐

  1. python菜鸟教程基础入门

    一. 可以使用'\'来连接多行.但是有括号的则不需要 a=b+\ c+\ d a1=['a', 'b'] 引号可以是单,双,三引号均可 二. 1. python有5个标准类型:数字,字符串,列表,元组 ...

  2. C#中的深度学习(四):使用Keras.NET识别硬币

    在本文中,我们将研究一个卷积神经网络来解决硬币识别问题,并且我们将在Keras.NET中实现一个卷积神经网络. 在这里,我们将介绍卷积神经网络(CNN),并提出一个CNN的架构,我们将训练它来识别硬币 ...

  3. NAT、端口映射、内网穿透、公网IP都是啥

    原文地址:https://wuter.cn/1756.html/ 一.IPv4地址 IP协议是为计算机网络相互连接进行通信而设计的协议,它是能使连接到网上的所有计算机网络实现相互通信的一套规则. 这里 ...

  4. Guns自动化生成代码使用

    一.Guns简介 Guns基于Spring Boot2,致力于做更简洁的后台管理系统.包含系统管理,代码生成,多数据库适配,SSO单点登录,工作流,短信,邮件发送,OAuth2登录,任务调度,持续集成 ...

  5. ajax上传单个文件

    jsp页面 <%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML> ...

  6. easyui框架 jsp页面

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. 「Elasticsearch」ES重建索引怎么才能做到数据无缝迁移呢?

    背景 众所周知,Elasticsearch是⼀个实时的分布式搜索引擎,为⽤户提供搜索服务.当我们决定存储某种数据,在创建索引的时候就需要将数据结构,即Mapping确定下来,于此同时索引的设定和很多固 ...

  8. 万字概览 Java 虚拟机

    为什么要学习 JVM 在很多 Java 程序员的开发生涯里,JVM 一直是黑盒子一般的存在,大家只知道运行 Java 程序需要依靠 JVM,千篇一律的配置几个类似 -Xms 和 -Xmx 的参数,可能 ...

  9. node环境使用lowdb轻量数据库以及基本用法

    1.安装: npm install lowdb --save 2..引入lowdb,设置表 const low = require('lowdb');  const FileSync = requir ...

  10. elasticsearch基本概念和基本语法

    Elasticsearch是基于Json的分布式搜索和分析引擎,是利用倒排索引实现的全文索引. 优势: 横向可扩展性:增加服务器可直接配置在集群中 分片机制提供更好的分布性:分而治之的方式来提升处理效 ...