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的主要内容,如果未能解决你的问题,请参考以下文章

第四周 day4 python学习笔记

python学习day4软件目录结构规范

python学习day4之路文件的序列化和反序列化

python学习之day4,函数

python学习(day4)

Python学习Day4