python中高阶函数和装饰器_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实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计,皆可应用在项目、毕业设计、课程设计、期末/期/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值