python学习——day4
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习——day4相关的知识,希望对你有一定的参考价值。
python装饰器:
定义:本质是函数,为其他函数添加附加功能
原则:不能修改被装饰的函数的源代码和调用方式
实现装饰器的知识储备:
1.函数就是“变量”
2.高阶函数
- 把一个函数名(门牌号相当于内存地址)当做实参传给另一个函数
- 返回值必须包含函数名
1 import time 2 3 def bar(): #需要增加功能的函数 4 time.sleep(3) 5 print(‘in the bar‘) 6 7 8 def test2(func): #装饰器,附加功能<显示输入函数的内存地址> 9 print(func) 10 return func 11 12 13 14 bar=test2(bar) 15 bar() #run bar
3.嵌套函数:在函数体内用def声明一个函数
1 def foo(): 2 print(‘in the foo‘) 3 def bar(): 4 print(‘in the bar‘) 5 6 bar() #必须要调用这个函数才能运行内部的函数,所以在装饰器中必须要return内部的函数名称才能调用 7 foo()
高阶函数 + 嵌套函数 = 装饰器
1 import time
2
3 def timer(func):
4 def doc(*args,**kwargs):
5 start_time=time.time()
6 func(*args,**kwargs)
7 stop_time=time.time()
8 print("运行耗时%s"%(stop_time-start_time))
9 return doc
10
11 @timer #==不需要修改调用方式,直接走装饰器里面的函数,来达到增加功能的作用
12 def test1():
13 time.sleep(3)
14 print("in the test1")
15
16 @timer
17 def test2(*args,**kwargs):
18 print("test2:",*args,**kwargs)
19
20
21 test1()
22 test2("alex",[1,2,3,4],{"alex":[15,51,"scinjks"],"yjx":15})
return值的问题
1 username,password="alex","abc123" 2 def auth(func): 3 def doc(*args,**kwargs): 4 user_input_username=input("请输入用户名:") 5 user_input_password=input("请输入密码:") 6 if user_input_username==username and user_input_password==password: 7 func(*args,**kwargs) #=运行下面的那个函数的返回值,so要return这个返回值到doc的函数。。实际上经过这一串操作。home()=doc() 8 print("welcom back %s"%user_input_username) 9 return func(*args,**kwargs) 10 else: 11 exit() 12 13 return doc 14 15 def index(): 16 print("welcom to index page") 17 @auth 18 def home(): 19 print("welcom to home page") 20 return "from home" 21 @auth 22 def bbs(): 23 print("welcom to bbs page") 24 25 26 index() 27 print(home()) 28 bbs()
终极版(添加判断)
1 username,password="alex","abc123" 2 def auth(auth_type): 3 def outer_wrapper(func): #就这么写吧,加一级。我也不知道为什么 4 def doc(*args,**kwargs): 5 if auth_type=="local": 6 user_input_username=input("请输入用户名:") 7 user_input_password=input("请输入密码:") 8 if user_input_username==username and user_input_password==password: 9 print("welcom back %s"%user_input_username) 10 return func(*args,**kwargs) #=运行下面的那个函数的返回值,so要return这个返回值到doc的函数。。实际上经过这一串操作。home()=doc() 11 #return func(*args,**kwargs) 12 else: 13 exit() 14 elif auth_type=="ldap": 15 print("ldap,我不会.00.00") 16 return doc 17 return outer_wrapper 18 19 def index(): 20 print("welcom to index page") 21 @auth(auth_type="local") 22 def home(): 23 print("welcom to home page") 24 #return "from home" 25 @auth(auth_type="ldap") 26 def bbs(): 27 print("welcom to bbs page") 28 29 30 index() 31 home() 32 bbs()
以上是关于python学习——day4的主要内容,如果未能解决你的问题,请参考以下文章