函数式编程

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. WinForm引用ActiveX组件,对Com组件的学习

    1.WinForm引用Adobe PDF Reader 工作中写WinForm程序经常会引用第三方的组件,包括引用Com组件,做了一个桌面程序需要展示PDF,看了些其它的开源组件对PDF的兼容性都不是 ...

  2. 30G 上亿数据的超大文件,如何快速导入生产环境?

    Hello,大家好,我是楼下小黑哥~ 如果给你一个包含一亿行数据的超大文件,让你在一周之内将数据转化导入生产数据库,你会如何操作? 上面的问题其实是小黑哥前段时间接到一个真实的业务需求,将一个老系统历 ...

  3. CCNP第二天之复习CCNA

    1.静态路由的扩展配置: (1).环回接口: 在设备上用于测试TCP/IP协议栈能否正常使用.默认没有.需要手工创建   R1(config)#interface loopback 1         ...

  4. axios前端加密通讯的处理

    axios前端加密通讯的处理 今天谈一谈前段时间,项目中遇见的前端axios加解密的处理. 先谈谈项目前景,因为安全的要求,所以我们要把前端所有的请求都得加密与服务端应用进行通讯,当然服务端的响应也是 ...

  5. spring整合sharding-jdbc实现分库分表

    1.创建两个库,每个库创建两个分表t_order_1,t_order_2 DROP TABLE IF EXISTS `t_order_1`; CREATE TABLE `t_order_1` ( `i ...

  6. Kotlin 简单使用手册

    在昨天和做android的前辈一番交谈后,觉得很惭愧,许多东西还只是知其然而不知其所以然,也深感自己的技术还太浅薄.以后要更加努力地学习,要着重学习原理.方法论,不能只停留在会用的阶段. 今天又要献丑 ...

  7. Spring Data Cache

    Spring Data Cache注解使用 方法是一个对象,使用对象中的属性,如ID,作为cache key RedisConnection超时设置 参考 SpringBoot使用Redis缓存

  8. springboot使用aspectJ

    添加springboot-aop的starter <dependency> <groupId>org.springframework.boot</groupId> ...

  9. JavaSwing 船只停靠管理可视化(三)

    JavaSwing 船只停靠管理可视化(一) JavaSwing 船只停靠管理可视化(二) JavaSwing 船只停靠管理可视化(三) JavaSwing 船只停靠管理可视化(四) JavaSwin ...

  10. Java源码系列4——HashMap扩容时究竟对链表和红黑树做了什么?

    我们知道 HashMap 的底层是由数组,链表,红黑树组成的,在 HashMap 做扩容操作时,除了把数组容量扩大为原来的两倍外,还会对所有元素重新计算 hash 值,因为长度扩大以后,hash值也随 ...