函数式编程

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. MAC 安装Python3.7

    查看下python版本 macosdeMacBook:Versions macos$ cd /System/Library/Frameworks/Python.framework/Versions/ ...

  2. 拥抱云原生,如何将开源项目用k8s部署?

    微信搜索[阿丸笔记],关注Java/MySQL/中间件各系列原创实战笔记,干货满满. k8s以及云原生相关概念近年来一直比较火热,阿丸最近搞了个相关项目,小结一下. 本文将重点分享阿里开源项目otte ...

  3. 各公有云1核1G的云主机跑分对比

    本文主要测评华为云.腾讯云.阿里云 1H1G服务器的性能,为保证结果有效性,使用环境如下: 1.1H1G Ubuntu 16.04_x64 2.Unixbench Version 5.1.3,详细信息 ...

  4. C++STL教程

    1 什么是STL? STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库.它被容纳于C++标准程序库(C++ Standard Libr ...

  5. 怎么同步fork原git项目

    如何实现 有时候,我们看到有价值的git项目,通常,我们会选择把原项目fork过来,然后自己去把玩研究.然而,原项目进行了更新,fork过来的代码却还是原来的版本,那有没有什么做法,能同时更新到我自己 ...

  6. Java 从匿名内部类到Lambda表达式

    匿名内部类和Lambda表达式有很多类似之处,首先都是在使用的时候才对接口进行实现,只是Lambda接口中只能由一个需要被实现的方法. 所有的Lambda表达式都可以 由匿名内部类改写: interf ...

  7. 仅4步,就可通过SQL进行分布式死锁的检测与消除

    摘要:本文主要介绍在 GaussDB(DWS) 中,如何通过 SQL 语句,对分布式死锁进行检测和恢复. 分布式数仓应用场景中,我们经常遇到数据库系统 hang 住的问题,所谓 hang 是指虽然数据 ...

  8. window10 安装Mysql 8.0.17以及忘记密码重置密码

    一.安装Mysql8.0.17 1:首先去官网下载安装包 下载地址:https://dev.mysql.com/downloads/mysql/ 2:将解压文件解压到你安装的目录:D:\mysql\m ...

  9. 最实用的visual studio插件,值得收藏!

    1.ReSharper(VS必装,代码重构.代码修正功能) ReSharper 是一个JetBrains公司出品的著名的代码生成工具.其能帮助Microsoft Visual Studio成为一个更佳 ...

  10. 关于一些视图的基本操作(结合YGGL.sql)

    二.操作题 1.创建视图emp_view2,包含员工编号,姓名,所在部门名称和收入. mysql> create or replace view emp_view2 -> as -> ...