day4、迭代器和生成器

1、装饰器(函数)

功能:装饰其他函数、为其他函数添加附加功能。

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

   2、不能修改被装饰原函数的调用方式

ps:函数即变量,高阶函数+嵌套函数

1.1函数即变量

def logger():
    pass    
def test1():
    pass
def test2():
    pass
def logger():
    pass    
def test1():
    pass
def test2():
    pass

1.2、高阶函数:1、把一个函数名当实参传给另一个函数(不修改函数源代码,增加功能)

def logger():
    pass    

def test(func):
    func()
    print(func)

test(logger)

 或2、返回值中包含函数名(不修改函数的调用方式)

def logger():
    pass    

def test(func):
    func()
   return func

test(logger)

 1.3、嵌套函数( 函数体内声明函数)

def foo():
    print('in the foo')
    def bar():
        print('in the bar')

 1.4、修饰器

不完全版:

import time
def timmer(func):
    def deco():
        start_time=time.time()
        func()
        stop_time=time.time()
        print("the func run time is %s"%(stop_time-start_time))
    return deco




def test1():
    time.sleep(1)
    print('in the test1')
    stop_time = time.time()
test1=timmer(test1)

test1()

 无参数版

import time
def timmer(func):
    def deco():
        start_time=time.time()
        func()
        stop_time=time.time()
        print("the func run time is %s"%(stop_time-start_time))
    return deco



@timmer #test1=timmer(test1)
def test1():
    time.sleep(1)
    print('in the test1')
    stop_time = time.time()


test1()

 有参数可用版

 1 import time
 2 
 3 def timmer(func):
 4     def warpper(*args,**kwargs):
 5         start_time=time.time()
 6         func()
 7         stop_time=time.time()
 8         print('the func run time is %s'%(stop_time-start_time))
 9     return warpper
10 
11 @timmer #test1=timmer(test1)
12 def test1():
13     time.sleep(3)
14     print('in the test1')
View Code

 终极版

 1 user,password='xiaochun','123'
 2 def auth(auth_type):
 3     print('auth_type',auth_type)
 4     def outwrapper(func):
 5         def wrapper(*args,**kwargs):
 6             if auth_type=='local':
 7                 username=input("username:")
 8                 passwd=input("password:")
 9                 if user==username and passwd==password:
10                     print('\033[32;1mUser has logied\033[0m')
11                     return func(*args,**kwargs)
12                 else:
13                     print('\033[41;1mInvalid user\033[0m')
14             else :
15                 print('用ldcp登陆')
16         return wrapper
17     return outwrapper
18 def index():
19     print('welcome to index page')
20 
21 @auth(auth_type='ldap')#home=aut
22 def bbs():
23     print('welcome to bbs')
24 
25 @auth(auth_type='local')
26 def home():
27     print('welcome to home')
28     return 'from home'
29 
30 index()
31 home()
32 bbs()
View Code

猜你喜欢

转载自www.cnblogs.com/LittleSpring/p/9350645.html
今日推荐