首页 > 代码库 > python第十一天

python第十一天

开始第二模块的学习:

装饰器 :

描述:

装饰器原则:

  1、不能修改被装饰的函数的源代码

  2、不能修改装饰的函数的调用方试

 

实现装饰器的需要:

  高阶函数+嵌套函数=装饰器

  高阶函数:

      类型I:将函数做为实参的函数,可以称为高阶函数

        

1 def fun_1(fun_2):#fun_1 为高阶函数
2     print(1)
3     fun_2()
4 
5 def fun_2():
6     print(2)
7 
8 fun_1(fun_2)

 

      类型II:返回值中包含函数名的函数,也可以称为高阶函数

      

def fun_3(fun):#fun_3 为高阶函数
    print(3)
    return fun

def fun_4():
    print(4)

#fun_3(fun_4)()#返回值可以直接运行
fun=fun_3(fun_4)#可以将返回值赋于一个变量
fun()#可以调用函数

 

  嵌套函数:

      在函数中定义一个新函数,这个函数称为嵌套函数

    

1 def fun_5():#fun_5 为嵌套函数
2     print(5)
3     def fun_5_1():
4         print(5.1)
5     
6 fun_5()

最简单的装饰:

 1 def fun_2(fun):#传入fun_1的函数
 2     def function():
 3     
 4         fun()
 5         print(in the fun_2......)#增加新的内容
 6     
 7     return function
 8 
 9 @fun_2#装饰fun_!  相当于fun_1=fun_2(fun_1)
10 def fun_1():
11     print("in the fun_1....")
12 
13 
14 fun_1()

装饰器: 模拟登陆认证

 1 #模拟网站登陆访问认证
 2 #
 3 name=abc
 4 password=123
 5 def certi(model):#装饰器
 6     def outr(fun):#装饰器加参数需要多加一层嵌套
 7         def login(*args,**kwargs):#为了兼容各类函数参数,添加 *args,**kwargs 不固定参数
 8             if model==password:
 9                 print(这是password认证)
10                 user_name = input(用户名:).strip()
11                 paswd=input(密码:).strip()
12                 if user_name==name and paswd==password:    
13                     print(通过认证)
14                     return fun(*args,**kwargs)
15                 else:
16                     print(用户或密码错误 ,退出)
17                     exit()
18             elif model==lamp:
19                 print(这是lamp认证)
20                 return fun(*args,**kwargs)
21             else:
22                 print(认证出错)
23         return login
24     return outr
25 
26 
27 def indxe():
28     print(欢迎进入首页)
29 
30 @certi(model=password)
31 def user():
32     print(欢迎进入用户页面:)
33 
34 @certi(model=lamp)
35 def bbs(name):
36     print(欢迎%s登陆论坛!!%name)
37 
38 indxe()
39 user()
40 bbs(name=yjj)

 

  

python第十一天