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等) ...
随机推荐
- Map2Shp软件字符编码解决方案——彻底杜绝Shape格式乱码
在使用Shape文件时,如果里面有中文属性信息时,经常会遇到属性信息变为乱码.尤其是ArcGIS10.2.1之后,Esri改变了软件的默认字符编码规则,打开之前保存的Shapefile文件,总会不时遇 ...
- Maven 基础(一) | 使用 Maven 的正确姿势
一.什么是 Maven? Maven 是一个项目管理工具,它的本质是一个项目对象模型(POM),体现在配置中就是我们常见的 pom.xml 文件,而这个 pom 文件就是 Maven 的核心,它管理了 ...
- cogs 1176. [郑州101中学] 月考 Set 做法
1176. [郑州101中学] 月考 ★★☆ 输入文件:mtest.in 输出文件:mtest.out 简单对比时间限制:1 s 内存限制:128 MB [题目描述] 在上次的月考中B ...
- hdu - 4990
Read the program below carefully then answer the question. #pragma comment(linker, "/STACK:1 ...
- 初入python,与同学者的第一次见面(小激动)
自2017来,接触python其实已经算是蛮久了,最苦的时光还是刚开始的时候,真的,我感觉编程就是一种感觉,有的时候就像找对象一样,感觉对了,怎么学都是带劲哈哈哈.在这个周围都在学习PHP的环境下,我 ...
- Django 连接mysql 踩过的坑
1.创建数据库 2.在Django项目文件下的settings.py配置数据库 3.在Django项目__init__.py文件中,用pymysql代替MySqlDB import pymysql p ...
- Qt Installer Framework翻译(3-5)
指定设置选项 设置页面使用户可以指定代理设置或安装附加组件. 用户在简介页面上点击"设置"来指定设置选项. 指定代理设置 默认情况下,安装程序使用系统代理设置.用户可以选择不使用或 ...
- 美食家app开发日记
民以食为天. 作为一个20年几乎没做过饭的吃货,从这个假期开始,想利用些时间,自己动手尝试,做些好吃的出来,一方面给父母减轻点负担,获得点成就感,一方面体验生活,学学厨艺,感受生活的乐趣和美好,其三, ...
- mybatis in查询
原文地址:https://blog.csdn.net/u012427355/article/details/79580561 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集 ...
- 深入理解大数据之——事务及其ACID特性
目录 事务简介 事物的定义 事务的目的 事务的状态 事务的ACID属性 ACID简介 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durabi ...