Python(十) 函数式编程: 匿名函数、高阶函数、装饰器
# 匿名函数 def add(x,y):
return x+y print(add(1,2)) f = lambda x,y: x+y print(f(1,2))
# x >y ? x :y # 条件为真时返回的结果 if 条件判断 else 条件为假时的返回结果 x= 2
y=1
r = x if x > y else y
print(r) #
def square(x):
return x*x # for x in list_x:
# square(x) # map 等价于上面的for 循环并且执行每一次函数 对于 所传 集合和序列的每一项 都执行 square 这个函数 并且 返回这个函数的每一个返回值
r = map(square, list_x)
print(r) # <map object at 0x0000014E44D86630>
print(list(r)) # [1, 4, 9, 16, 25, 36, 49, 64]
list_x= [1,2,3,4,5,6,7,8] def square(x):
return x*x # 匿名函数 替代 square 函数
r = map(lambda x: x*x, list_x)
print(list(r)) # [1, 4, 9, 16, 25, 36, 49, 64]
list_x= [1,2,3,4,5,6,7,8]
list_y= [1,2,3,4,5,6,7] def square(x):
return x*x # 匿名函数 替代 square 函数 map(func, *iterables)
r = map(lambda x,y: x*x +y, list_x,list_y)
print(list(r)) # [2, 6, 12, 20, 30, 42, 56, 72]
from functools import reduce list_x= [1,2,3,4] # reduce 连续计算,连续调用lambda
r= reduce(lambda x,y: x+y,list_x)
# reduce计算过程 连续计算
# 1+2=3
# 3+3=6
# 6+4=10
print(r) # r= reduce(lambda x,y: x*y,list_x)
print(r) # #第三个参数 是初始值
r= reduce(lambda x,y: x*y,list_x,10)
print(r) #
#filter 过滤 list_x= [1,0,1,0,0,1]
# 根据函数返回真假 判断当前元素是否包含在集合里面
r = filter(lambda x: True if x==1 else False, list_x)
print(list(r)) # [1, 1, 1]
#装饰器 很频繁 很实用
# 类似C#特性
# 对修改是封闭的, 对扩展是开放的
import time def f1():
print("hello") def f2():
print("hello") def print_time(func):
print(time.time())
func() print_time(f1)
print_time(f2) 结果:
1534744900.0469174
hello
1534744900.0469174
hello
import time def decortator(func):
def wrapper():
print(time.time())
func()
return wrapper def f1():
print("hello") f = decortator(f1)
f() 结果:
1534745267.9373472
hello
import time def decortator(func):
def wrapper():
print(time.time())
func()
return wrapper # 装饰器 特别的 语法
@decortator
def f1():
print("hello") f1() 结果:
1534745521.8246493
hello
AOP 设计模式
多参数输入
import time def decortator(func):
def wrapper(*args):
print(time.time())
func(*args)
return wrapper # 装饰器 特别的 语法
@decortator
def f1(func_name):
print("hello"+func_name) @decortator
def f2(func_name,func_name2):
print("hello"+func_name+func_name2) f1('f1name')
f2('name','name2') 结果:
1534746043.7318072
hellof1name
1534746043.7318072
hellonamename2
import time
#*args 多参数, **kw 关键字
def decortator(func):
def wrapper(*args, **kw):
print(time.time())
func(*args, **kw)
return wrapper # 装饰器 特别的 语法
@decortator
def f1(func_name):
print("hello"+func_name) @decortator
def f2(func_name,func_name2):
print("hello"+func_name+func_name2) @decortator
def f3(func_name,func_name2, **kw):
print("hello"+func_name+func_name2)
print(kw) f1('f1name')
f2('name','name2')
f3('name1','name2',a=1,b=2,c='') 结果:
1534746321.3270056
hellof1name
1534746321.3270056
hellonamename2
1534746321.3279607
helloname1name2
{'a': 1, 'b': 2, 'c': ''}
api接口
身份验证,防止攻击等
装饰器 很重要
Python(十) 函数式编程: 匿名函数、高阶函数、装饰器的更多相关文章
- 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 ...
- python之路(4)高阶函数和python内置函数
前言 函数式编程不用变量保存状态,不改变变量 内置函数 高阶函数 把函数当作参数传给另一个对象 返回值中包含函数 使用的场景演示: num_test = [1,2,10,5,8,7] 客户说 :对上述 ...
- Python复习笔记(四)高阶函数/返回函数/匿名函数/偏函数/装饰器
一.map/reduce map map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次 作用到序列的每个元素,并把结果作为新的Iterator返回. reduce r ...
- Python 编程基础之高阶函数篇(一)
高阶函数:能接受函数作为参数的函数. 如: f=abs def add(x,y,f): return f(x)+f(y) 如果我们用:add(-5,9,f)来调用该高阶函数,则返回结果为:14 ...
- python递归,装饰器,函数, 高阶函数
在函数内部,可以调用其它函数,如果一个函数在内部调用自身本身,这个函数就是递归函数 递归特性:1.必须有一个明确的结束条件 2.每次进入更深一层递归时,问题规模比上次递归都有所减少(10-8-5等) ...
- 函数式编程与React高阶组件
相信不少看过一些框架或者是类库的人都有印象,一个函数叫什么creator或者是什么什么createToFuntion,总是接收一个函数,来返回另一个函数.这是一个高阶函数,它可以接收函数可以当参数,也 ...
随机推荐
- 洛谷 P1026 统计单词个数 (分组+子串预处理)(分组型dp再次总结)
一看完这道题就知道是划分型dp 有两个点要注意 (1)怎么预处理子串. 表示以i为开头,结尾在j之前(含),有没有子串,有就1,没有就0 (2)dp的过程 这种分成k组最优的题目已经高度模板化了,我总 ...
- SSIS安装以及安装好找不到商业智能各种坑
原文:SSIS安装以及安装好找不到商业智能各种坑 这两天为了安装SSIS,各种头疼.记录一下,分享给同样遇到坑的.. 安装SSIS需要几个步骤. 先说一下我的情况,安装SQL的时候,一直默认下一步,没 ...
- 尼克的任务 dp 洛谷1280
蒟蒻表示老久没看过dp题目了,,挺水的一道dp题目都没想出来,,, 首先设dp[i]表示从开始到i时间的最大空闲时间,用vector to[x] 表示从x点开始的任务结束时间,cnt[x]表示从x开始 ...
- 【Mockplus视频教程】《10分钟玩转Mockplus》
地址:http://doc.mockplus.cn/?p=152
- js模拟支付宝提交表单
弄过支付宝的程序猿可能都知道,里面有非常多地方都用到了自提交表单的方式,支付宝的接口通过请求API的形式取得server返回的表单字符串,使用out.print("表单字符串")在 ...
- Python库之pyudev (一)
库pyudev是libudev的python封装,libudev提拱了对本地设备的列举与查询API. 1.安装 pip install pyudev 2. 使用 2.1 开始 导入pyudev,验证库 ...
- Session、Cookie总结
什么是sessnion,session存在哪,能存多久.怎么设置他的存储时间 一.什么是session 1.session 被翻译为会话.当client(一般都是浏览器作为client)訪问serve ...
- 单点登录(二)使用Cookie+File实现单点登录登出(附源代码)
上一篇文章<单点登录(一)使用Cookie+File实现单点登录>中,我们实现了单点登录的功能. 本文作为上一篇文章的扩展部分,加入"单点登出"功能. 源代码下载:链接 ...
- [BZOJ1858] [SCOI2010] 序列操作 解题报告 (线段树)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1858 Description lxhgww最近收到了一个01序列,序列里面包含了n个数, ...
- Mvc 返回文件直接下载
今天碰到一个问题,前端点击下载文件,后端判断文件是否存在,不存在则自动生成文件(图片),返回前端会自动下载文件 网上查了一些 Mvc action中返回File类型 设置一些contentType ...