python进阶:闭包、map/reduce/filter函数、lambda函数、装饰器

函数式编程


一、闭包
  1. python一切皆对象

一切皆对象意味着,所有类型均可被赋值,传参~;函数可以当做参数传递,也可以被当做返回值返回;在其他一些语言中函数仅是一段代码块。

  1. 闭包的定义与用法

如何验证是闭包?

  1. 闭包的应用场景
    实现计步功能

使用闭包的环境变量而不借助全局变量,实现了良好的封装性!!!


二、匿名函数/表达式
  1. 匿名表达式的定义

expression中经常用到三元表达式,可以做判断

一般语言中三元表达式: x > y ? x : y

python中格式: x if x > y else y

注意:lamba表达式经常结合map、reduce、filter等函数使用

三、map函数:映射

  • 多变量下的map

四、reduce函数:归约
  1. 定义

标注中多了个x…

四、filter函数

filter返回的filter对象也需要借助内置函数或者继承来的函数list等来取值!!


五、装饰器

  1. 用到的两个思想

    • 对于函数定义的复杂是可以接受的,但不能忍受函数调用的复杂
    • 函数对于修改应该是封闭的,对于扩展应是开放的
  2. 装饰器的定义

    装饰器demo

上述装饰器仅是个demo,并不能在多种函数类型的情况下实现复用!因为wrapper中参数限定死了:只有一个位置参数

注意:wrapper中参数名字可以不同于被包装函数的参数名字,wrapper参数泛指一个位置形参!!

从上图可知:装饰器的几大优势:
+ 未改变已创建函数的定义
+ 未改变已创建函数的调用方式
+ 为已创建函数添加了新的模块!!

  1. 装饰器装饰后返回的函数是个闭包(没什么实际作用,只是为了加深闭包的理解)

  1. 真正具有实际使用价值的装饰器(必须能够装饰多种类型的函数)

面对多种类型函数情况下,装饰器要有普适性才有意义:

可以记忆装饰器内参数的形参:可变位置参数+可变关键字参数=泛指所有类型的参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值