python 高阶函数与装饰器
高阶函数定义
1.函数接收的参数是一个函数名
2.函数的返回值是一个函数名
以上两者满足任意一个,就是高阶函数 装饰器定义
本质就是函数,功能是为其他函数添加新功能
装饰器的原则
1.不修改被装饰函数的源代码(开放封闭原则)
2.为被装饰函数添加新功能后,不修改被修饰函数的调用方式
装饰器=高阶函数+函数嵌套+闭包
# 无返回值无参数
import time def timer(func): #func = test
def w():
start_time = time.time()
func() #就是在运行test()
stop_time = time.time()
print("运行时间是%d"%(stop_time-start_time))
return w @timer # 相当于 test = timer(test)
def test():
time.sleep(2)
print("from test") # test = timer(test) #返回的是w的地址
# test() #相当于执行w test()
#加上返回值
import time def timer(func): #func = test
def w():
start_time = time.time()
res = func() #就是在运行test()
stop_time = time.time()
print("运行时间是%d"%(stop_time-start_time))
return res
return w @timer # 相当于 test = timer(test)
def test():
time.sleep(2)
print("from test")
return "这是test的返回值" # test = timer(test) #返回的是w的地址
# test() #相当于执行w res = test()
print(res)
#加上参数和返回值 装饰器最终形式
import time def timer(func): #func = test #func = test1
def w(*args,**kwargs):
start_time = time.time()
res = func(*args,**kwargs) #就是在运行test() test1()
stop_time = time.time()
print("运行时间是%d"%(stop_time-start_time))
return res
return w @timer # 相当于 test = timer(test)
def test(name,age):
time.sleep(2)
print("from test %s %s"%(name,age))
return "这是test的返回值" res = test("liao",18)
print(res) @timer # 相当于 test1 = timer(test1)
def test1(name,age,g):
time.sleep(1)
print("from test1 %s %s %s"%(name,age,g))
return "这是test1的返回值" res1 = test1("bo",26,"shi")
print(res1)
用户登陆(简单流程判断)
l = [{"name":"liao","pwd":"123"},{"name":"tom","pwd":"123"}] #用户数据
c_d = {"user":None,"login":False} #定义一个空的临时的用户字字典 def a_f(func):
def w(*args,**kwargs):
if c_d["user"] and c_d["login"]: #判断临时字典里是否有用户登陆,没有就输入
res = func(*args,**kwargs) #有就进入下一步
return res user = input("请输入用户名:").strip() #临时字典没有数据就输入用户名
pwd = input("请输入密码:").strip() #临时字典没有数据就输入密码 for i in l: #遍历用户数据
if user == i["name"] and pwd == i["pwd"]: #判断输入的用户和密码是否在用户数据里
c_d["user"] = user #输入正确,数据保存到临时的用户字字典里,下一步不用再输入用户和密码
c_d["login"] = True
res = func(*args,**kwargs) #进入
return res
else: #如果输入的用户名和密码不在用记数据里,提示用户
print("用户名或者密码错误")
return w @a_f
def index():
print("欢迎来到主页面") @a_f
def home():
print("这里是你家") @a_f
def shopping_car():
print("查看购物车啊亲") index()
home()
shopping_car()
python 高阶函数与装饰器的更多相关文章
- Python高阶函数之 - 装饰器
高阶函数: 1. 函数名可以作为参数传入 2. 函数名可以作为返回值. python装饰器是用于拓展原来函数功能的一种函数 , 这个函数的特殊之处在于它的返回值也是一个函数 , 使用pyth ...
- Python学习笔记【第六篇】:迭代器、生成器、高阶函数、装饰器
迭代器 迭代器是访问集合元素的一种方式,迭代器从对象的第一个元素开始访问,知道所有元素被访问完成.迭代器只能往前访问,不能通过索引访问. 类型内部使用__iter__()方法转为迭代器,使用__nex ...
- python开发基础04-函数、递归、匿名函数、高阶函数、装饰器
匿名函数 lamba lambda x,y,z=1:x+y+z 匿名就是没有名字 def func(x,y,z=1): return x+y+z 匿名 lambda x,y,z=1:x+y+z #与函 ...
- python笔记十三(高阶函数、装饰器)
一.高阶函数 函数只要有以下两个特征中一个就可以称为高阶函数: a:函数名作为一个实参传入另一个函数中 b:函数的返回值中包含函数名 下面我们用代码来感受一下这两种形式: import time # ...
- Python_高阶函数、装饰器(decorator)
一.变量: Python支持多种数据类型,在计算机内部,可以把任何数据都看成一个“对象”,而变量就是在程序中用来指向这些数据对象的,对变量赋值就是把数据和变量给关联起来. 对变量赋值x = y是把变量 ...
- python中高阶函数与装饰器
高阶函数的定义:传入参数有函数名或者返回值有内置函数名的函数. 最简单的高阶函数: def add(x, y, f): return f(x) + f(y) add(-5, 6, abs) 常用 ...
- Python3(十) 函数式编程: 匿名函数、高阶函数、装饰器
一.匿名函数 1.定义:定义函数的时候不需要定义函数名 2.具体例子: #普通函数 def add(x,y): return x + y #匿名函数 lambda x,y: x + y 调用匿名函数: ...
- Python(十) 函数式编程: 匿名函数、高阶函数、装饰器
一.lambda表达式 lambda parameter_list: expression # 匿名函数 def add(x,y): return x+y print(add(1,2)) f = la ...
- python中高阶函数与装饰器(3)
>>> f = lambda x: x * x>>> f<function <lambda> at 0x101c6ef28> >> ...
随机推荐
- NeHe OpenGL教程 第四十七课:CG顶点脚本
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第四十六课:全屏反走样
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- MRD
搜索 复制
- centos修改hostname以及时间同步
centos修改hostname 方法一: 执行命令:hostname test 则修改hostname为test 方法二: 永久修改hostname vi /etc/sysconfig/networ ...
- XAMPP(Linux版-x86兼容)官网下载
欢迎光临 XAMPP 的 Linux 版 (x86 兼容处理器版)顺便提一下:该软件以前被称作 LAMPP,但为了避免误解,我们将其重名命为 »XAMPP 的 Linux 版«.所以,如果您在寻找 L ...
- MYSQL C API : struct MYSQL_STMT 结构的组合使用
#include <iostream> #include <string> #include <string.h> #include <assert.h> ...
- XE6移动开发环境搭建之IOS篇(1):准备安装材料(有图有真相)
网上能找到的关于Delphi XE系列的移动开发环境的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 1.选择方案 --- ...
- AX dynamics 2012 ssrs 开发报错:Native compiler return value: ‘[BC30179]
具体报错内容如下: System.Web.Services.Protocols.SoapException: An unexpected error occurred while compiling ...
- android C++环境搭建
http://jingyan.baidu.com/article/3ea51489e7a9bd52e61bbac7.html
- 使用opencv设置图像的格式以及帧率
最近楼主正在写一个关于图像存储的程序,LZ有一颗求知心,想要了解保存的图像的格式以及获取摄像头帧率.晚些时候会写一篇关于opencv获取摄像头并且保存每帧图像信息方法. 1.修改图像的像素显示: 首先 ...