Python3(十) 函数式编程: 匿名函数、高阶函数、装饰器
一.匿名函数
1.定义:定义函数的时候不需要定义函数名
2.具体例子:
#普通函数
def add(x,y):
return x + y
#匿名函数
lambda x,y: x + y
调用匿名函数:
f = lambda x,y: x + y #赋值后可以调用 print(f(1,2)
lambda中(也就是:后面)只能进行简单的表达式操作,不能进行赋值操作。
二. 三元表达式
格式为:条件为真时返回的结果 if 条件判断 else 条件为假时返回的结果
x = 2 y = 1 r = x if x > y else y print(r) #
三元表达式在lambda中运用比较多。
三.map类
1.定义:map(函数,序列),把序列中所有值依次传到函数中并依次接受返回结果组成一个list。
其实是一个函数的映射。
2.求平方:
list_x = [1,2,3,4,5,6,7,8]
def square(x):
return x * x
r = map(square,list_x)
print(list(r))
#[1, 4, 9, 16, 25, 36, 49, 64]
四.map与lambda
将map和lambda函数结合:
1
list_x = [1,2,3,4,5,6,7,8] r = map(lambda x: x * x,list_x) print(list(r)
2 接受多个参数:
list_x = [1,2,3,4,5,6,7,8] list_y = [1,2,3,4,5,6,7,8] r = map(lambda x,y: x * x + y,list_x,list_y) print(list(r))
注意:若个数不相等,不会报错,但只能计算到最少的那位
五.reduce
1.

2. reduce运算的规则:做连续的计算,连续的调用lambda表达式。
reduce下的函数一定要有两个参数。
3.例子:
from functools import reduce list_x = [1,2,3,4,5,6,7,8] r = reduce(lambda x,y:x + y,list_x) print(r) #
运算过程:初始取前两位,之后将计算结果作为x传进去继续顺序取:
((((((1 + 2)+3) + 4)+ 5)+6)+7)+8
4.注意点:
- 继续做什么操作是lambda确定的,不仅只能够相加。
- 最后一位可以设定初始值,在第一次计算中就进行计算了:
eg:r = reduce(lambda x,y:x + y,list_x,10)
六. filter
1.filter可以过滤掉不符合规则的数据。

2.例子:
剔除数据为0的元素:
list_x = [1,0,0,1,0,1,1,0,1] r = filter(lambda x: True if x == 1 else False,list_x) print(list(r)) #[1, 1, 1, 1, 1]
简化为:
list_x = [1,0,0,1,0,1,1,0,1] r = filter(lambda x: x ,list_x) print(list(r)) #[1, 1, 1, 1, 1]
filter返回值的要是真和假才能完成过滤
七.命令式编程vs函数式编程
命令式编程涉及到 def if else for
函数式编程涉及到 map reduce filter lambda(算子)
八. 装饰器 一
import time
def f1():
print(time.time())
print('This is a function')
f1()
#1532404967.3804688 #Unix时间戳
This is a function
如果很多的函数都要获取时间的功能:
import time
def f1():
print('This is a function')
def f2():
print('This is a function')
def print_current_time(func):
print(time.time())
func()
print_current_time(f1)
print_current_time(f2)
这种需求变更方案的缺点:打印时间的需求是属于每个函数本身的,并不是新增加的,并没有体现函数本身的特性。
这就是装饰器所要解决的问题。
装饰器 二
编写装饰器:
import time
def decorator(func):
def wrapper():
print(time.time())
func()
return wrapper
def f1():
print('This is a function')
f = decorator(f1) #f得到了return的wrapper
f()
装饰器 三
语法塘:
import time def decorator(func):
def wrapper(): print(time.time()) func() return wrapper @decorator #@符号 def f1(): print('This is a function') f1()
没有改变调用的逻辑也没有改变函数编码。是装饰器的意义所在。
@decorator相当于对f1()装饰。
装饰器 四
1.带参函数的装饰器:
import time
def decorator(func):
def wrapper(func_name):
print(time.time())
func(func_name)
return wrapper
@decorator
def f1(func_name):
print('This is a function named' + func_name)
f1('test_func')
2.若多个函数接受不同数量的参数:
import time
def decorator(func):
def wrapper(*args):
print(time.time())
func(*args)
return wrapper
@decorator
def f1(func_name):
print('This is a function named' + func_name)
@decorator
def f2(func_name1,func_name2):
print('This is a function named'+func_name1 )
print('This is a function named'+ func_name2)
f1('test_func')
f2('test_func1','test_func2') #可以支持不同参数个数的函数
装饰器 五
1.*args不支持**关键字参数
支持关键字参数:
import time
def decorator(func):
def wrapper(*args,**kw): #加入**kw,较为完整
print(time.time())
func(*args,**kw)
return wrapper
@decorator
def f1(func_name):
print('This is a function named' + func_name)
@decorator
def f2(func_name1,func_name2):
print(func_name1 + func_name2)
@decorator
def f3(func_name1,func_name2,**kw):
print(func_name1 + func_name2)
print(kw)
f1('test_func')
f2('','')
f3('','',a = 1, b = 2,c = '')
#1532408656.565761
#This is a function namedtest_func
#1532408656.5667255
#
#1532408656.5677273
#
#{'a': 1, 'b': 2, 'c': '123'}
2.
def decorator(func): def wrapper(*args,**kw): #加入**kw,较为完整 print(time.time()) func(*args,**kw) return wrapper func(*args,**kw)这个形式,无论什么方式都可以调用。
装饰器 六
如果想对某个封装单元修改,可以加上装饰器。
不需要破坏代码实现,易于代码复用。
一个函数能够有多个装饰器。
需要验证身份的函数上加上专门的装饰器之类的用途。
Python3(十) 函数式编程: 匿名函数、高阶函数、装饰器的更多相关文章
- Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍
参考: 函数式编程 高阶函数 Note A.函数式编程(Functional Programming)介绍 1.函数是Python内建支持的一种封装,我们通过一层一层的函数调用把复杂任务分解成简单的任 ...
- day03 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...
- Python---12函数式编程------12.1高阶函数
函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...
- Python学习笔记八:文件操作(续),文件编码与解码,函数,递归,函数式编程介绍,高阶函数
文件操作(续) 获得文件句柄位置,f.tell(),从0开始,按字符数计数 f.read(5),读取5个字符 返回文件句柄到某位置,f.seek(0) 文件在编辑过程中改变编码,f.detech() ...
- python学习三十四天函数高阶函数定义及用法
python函数高阶函数是把函数当成一个变量,传递给函数作为参数,或者函数的返回值里面有函数,都称为高阶函数, 1,把函数作为参数传递 def dac(x,y): return x+y def tes ...
- [Python3] 034 函数式编程 匿名函数
目录 函数式编程 Functional Programming 1. 简介 2. 函数 3. 匿名函数 3.1 lambda 表达式也称"匿名函数" 3.2 lambda 表达式的 ...
- 函数式编程与React高阶组件
相信不少看过一些框架或者是类库的人都有印象,一个函数叫什么creator或者是什么什么createToFuntion,总是接收一个函数,来返回另一个函数.这是一个高阶函数,它可以接收函数可以当参数,也 ...
- Python 编程基础之高阶函数篇(一)
高阶函数:能接受函数作为参数的函数. 如: f=abs def add(x,y,f): return f(x)+f(y) 如果我们用:add(-5,9,f)来调用该高阶函数,则返回结果为:14 ...
- python递归,装饰器,函数, 高阶函数
在函数内部,可以调用其它函数,如果一个函数在内部调用自身本身,这个函数就是递归函数 递归特性:1.必须有一个明确的结束条件 2.每次进入更深一层递归时,问题规模比上次递归都有所减少(10-8-5等) ...
随机推荐
- qiniuLive 连麦流程介绍
本文出自APICloud官方论坛 qiniuLive 封装了七牛直播云服务平台的移动端开放 SDK.该模块包括视频流采集和视频流播放两部分 iOS连麦流程图: Android连麦流程图: 以下部分代码 ...
- 一文搞定Spring Boot + Vue 项目在Linux Mysql环境的部署(强烈建议收藏)
本文介绍Spring Boot.Vue .Vue Element编写的项目,在Linux下的部署,系统采用Mysql数据库.按照本文进行项目部署,不迷路. 1. 前言 典型的软件开发,经过" ...
- wannafly camp day1
题目描述: 恬恬的生日临近了.宇扬给她准备了一个大 蛋糕. 正如往常一样,宇扬在蛋糕上插了nnn支蜡烛,并把蛋糕分为mmm个区域.因为某种原因,他必须把第iii根蜡烛插在第aia\_iai个区域或第 ...
- Lambda表达式(lambda expression)⭐⭐⭐⭐⭐
原作者 lambda表达式(lambda expression)实际上是匿名函数一种表示形式, 即没有函数名的函数:参数列表=>表达式或语句块,在我看来主要目是为了简化代码编写,提高代码可读性而 ...
- MySQL——DOS命令
翻开之前的笔记发现有这么一篇,于是整理了一下发出来加深记忆并分享交流,欢迎纠错,谢谢!!! 1.启动MySQL服务: net start mysql; 2.停止MySQL服务: net stop my ...
- Java入门 - 语言基础 - 05.基本数据类型
原文地址:http://www.work100.net/training/java-basic-datatype.html 更多教程:光束云 - 免费课程 基本数据类型 序号 文内章节 视频 1 概述 ...
- Java入门 - 语言基础 - 22.异常处理
原文地址:http://www.work100.net/training/java-exception.html 更多教程:光束云 - 免费课程 异常处理 序号 文内章节 视频 1 概述 2 Exce ...
- [bzoj4825] [loj#2018] [Hnoi2017] 单旋
Description \(H\) 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构.伸展树(\(splay\))是一种数据 结构,因为代码好写,功能多,效率高,掌握这种数据结构 ...
- 【VBA】EXCEL通过VBA生成SQL,自动生成创建表结构SQL
原文:https://blog.csdn.net/zutsoft/article/details/45441343 编程往往与数据库密不可分,一个项目往往有很多的表,很多时候通过excel来维护表结构 ...
- vuex 基本语法
VUEX 的核心概念 1 .State (常用):2.Getters :3.Mutations(常用):4.Actions :5.Modules: 1.State是唯一的数据源,单一的状态树 cons ...