百里屠苏top  

一 . 装饰器(很重要的一个内容)

定义:  本质是函数,(装饰其他函数)就是为其他函数添加其他功能

注意事项:a.不能修改被装饰的函数的源代码,

                  b. 不能修改被装饰的函数的调用方式。

 补充:

         a.函数就是“变量”,把函数体赋给了函数名。

         b. 高阶函数+嵌套函数>>>>装饰器

         c.高阶函数:把一个函数名当做实参传给另一个函数(不修改被装饰的函数的源代码);

                              返回值中包含函数名(不修改被装饰的函数的调用方式)。

#一个函数名当做实参传给另一个函数
import
time def bar(): time.sleep(3) print('in the bar') def test1(func): start_time = time.time() func() #run bar stop_time = time.time() print("the func run time is %s" % (stop_time - start_time) ) #运行时间等于结束时间减去开始时间 test1(bar)

注:不大理解这个(哈哈哈)

# 返回值中包含函数名
import
time def bar(): time.sleep(3) print('in the bar') def test2(func): print(func) return func #print(test2(bar)) bar = test2(bar) bar()

 

 

 d.嵌套函数

函数的嵌套,在函数的内部再申明一个函数,而不是去调用
def foo():
    print("in the foo")
    def bar():
        print("in tne bar")    #函数的嵌套,在函数的内部再申明一个函数,而不是去调用

    bar()
foo()

 


#局部变量与全局变量的访问次序:
x = 0 def grandpa(): x = 1 def dad(): x=2 def son(): x=3 print(x) son() dad() grandpa()
运行结果:3


 


 1 import time
 2 user,passwd = "xiaolaizi","abc123"
 3 #装饰器
 4 def auth(func):
 5     def wrapper(*args,**kwargs):
 6         username = input ("Username:").strip()   #strip去空格
 7         password = input("Password:").strip()
 8 
 9         if user == username and passwd == password:
10             print("\033[32;1mUser has passed authentication\033[0m")
11             res = func(*args,**kwargs)
12             print(20*'*')
13             return res
14         else:
15             exit("\033[31;1mUser has not passed authentication\033[0m")
16     return wrapper
17 def index():           #定义一个首页
18     print("welcome to index page")
19 @auth   #本地验证@auth(auth_type = "local")
20 def home():        #定义一个登陆页面
21     print("welcome to home page")
22     return "from home"
23 @auth   #远程验证@auth(auth_type = "ldap")
24 def bbs():        #定义一个论坛区页面
25     print("welcome to bbs page")
26 
27 index()
28 print(home())
29 #home()
30 bbs()
View Code

 

 

 

 

        

posted on 2018-07-26 22:04  百里屠苏top  阅读(134)  评论(0编辑  收藏  举报