lda 装饰器 内存地址 input 。。 操作 run col ack
python装饰器:
定义:本质是函数,为其他函数添加附加功能
原则:不能修改被装饰的函数的源代码和调用方式
实现装饰器的知识储备:
1.函数就是“变量”
2.高阶函数
- import time
- def bar(): #需要增加功能的函数
- time.sleep(3)
- print(‘in the bar‘)
- def test2(func): #装饰器,附加功能<显示输入函数的内存地址>
- print(func)
- return func
- bar=test2(bar)
- bar() #run bar
3.嵌套函数:在函数体内用def声明一个函数
- def foo():
- print(‘in the foo‘)
- def bar():
- print(‘in the bar‘)
- bar() #必须要调用这个函数才能运行内部的函数,所以在装饰器中必须要return内部的函数名称才能调用
- 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值的问题
- username,password="alex","abc123"
- def auth(func):
- def doc(*args,**kwargs):
- user_input_username=input("请输入用户名:")
- user_input_password=input("请输入密码:")
- if user_input_username==username and user_input_password==password:
- func(*args,**kwargs) #=运行下面的那个函数的返回值,so要return这个返回值到doc的函数。。实际上经过这一串操作。home()=doc()
- print("welcom back %s"%user_input_username)
- return func(*args,**kwargs)
- else:
- exit()
- return doc
- def index():
- print("welcom to index page")
- @auth
- def home():
- print("welcom to home page")
- return "from home"
- @auth
- def bbs():
- print("welcom to bbs page")
- index()
- print(home())
- bbs()
终极版(添加判断)
- username,password="alex","abc123"
- def auth(auth_type):
- def outer_wrapper(func): #就这么写吧,加一级。我也不知道为什么
- def doc(*args,**kwargs):
- if auth_type=="local":
- user_input_username=input("请输入用户名:")
- user_input_password=input("请输入密码:")
- if user_input_username==username and user_input_password==password:
- print("welcom back %s"%user_input_username)
- return func(*args,**kwargs) #=运行下面的那个函数的返回值,so要return这个返回值到doc的函数。。实际上经过这一串操作。home()=doc()
- #return func(*args,**kwargs)
- else:
- exit()
- elif auth_type=="ldap":
- print("ldap,我不会.00.00")
- return doc
- return outer_wrapper
- def index():
- print("welcom to index page")
- @auth(auth_type="local")
- def home():
- print("welcom to home page")
- #return "from home"
- @auth(auth_type="ldap")
- def bbs():
- print("welcom to bbs page")
- index()
- home()
- bbs()
python学习——day4
来源: http://www.bubuko.com/infodetail-2337800.html