Python----多个装饰器装饰一个函数

#装饰器回顾:

# def wrapper(f): #f= func1#     def inner(*args,**kwargs):#         print(333)   #1.  333#         ret=f(*args,**kwargs)#         print(666)#         return  ret#     return inner# @wrapper  # func1=wrapper(func1)=inner# def func1():  # inner()   定义函数,将函数加载到内存中,但是不执行,等待被调用#     print(111)   #2.  111# func1()   #inner()# @wrapper# def func2(a,b):#     print(a,b)# func2(1,2)# @wrapper# def func3(a,b):#     print(a,b)#     return 555# print(func3(2,3))

# #函数的有用信息:# def login(username,password):#     ‘‘‘#     此函数需要用户名,密码两个参数,完成的是登录的功能.#     :return:Ture 登录成功.False登录失败.#     :param username:#     :param password:#     :return:#     ‘‘‘#     print(‘登录成功..‘)#     return True# print(login.__name__) #打印函数名# print(login.__doc__)  #打印解释

# def wrapper(f):#     def inner(*args,**kwargs):#         print(f.__name__)#         print(f.__doc__)#         """执行函数之前的操作"""#         ret=f(*args,**kwargs)#         ‘‘‘执行函数之后的操作‘‘‘#         return ret#     return inner()# @wrapper# def login(uername,password):#    ‘‘‘此函数需要用户名,密码两个参数,完成的是登录的功能。#    :return: True 登录成功。 False登录失败。#     ‘‘‘#    print(‘登录成功...‘)#    return True#    print(login.__name__)#    print(login.__doc__)# login(1, 2)

# from functools import wraps# def wrapper(f):#     @wraps(f)#     def inner(*args, **kwargs):#         """执行函数之前的操作"""#         ret = f(*args, **kwargs)#         """执行函数之后的操作"""#         return ret#     return inner## @wrapper# def login(username, password):#     """#     此函数需要用户名,密码两个参数,完成的是登录的功能。#     :return: True 登录成功。 False登录失败。#     """#     a = 2#     c = 4#     print(‘登录成功...‘)#     return True## print(login.__name__)# print(login.__doc__)# for i in login.__dict__:#     print(i)# print(dir(login))

#带参数的装饰器

# import time# def timer_out(flag1):  #falg1 = flag#     def timer(f):#         def inner(*args, **kwargs):#             if flag1:#                 start_time = time.time()#                 time.sleep(0.3)#                 ret = f(*args, **kwargs)#                 end_time = time.time()#                 print(‘执行效率%s‘ % (end_time-start_time))#                 return ret#             else:#                 ret = f(*args, **kwargs)#                 return ret#         return inner#     return timer## flag = True# #func1=timer_out(func1)  timer_out(flag1)=timer# @timer_out(flag)  # 1,步 timer_out(flag) == timer 2,@与timer结合,变成你熟悉的装饰器 @timer# def func1():#     print(111)### @timer_out(flag)# def func2():#     print(222)### @timer_out(flag)# def func3():#     print(333)## func1()# func2()# func3()

#错误案例# count = 1# def func4():#     count = count + 1#     print(count)## func4()

# 局部只能引用全局的变量,不能修改,如果要修改,global。def func4():    count = 3    def inner():        nonlocal count        count = count + 1        print(count)func4()# 子函数只能引用父函数的变量,不能修改,如果要修改,nonlocal。

#多个装饰器装饰器装饰一个函数def wrapper1(func):    def inner1():        print(‘wrapper1,before func‘)        func()        print(‘wrapper1, after func‘)    return inner1def wrapper2(func):   # func = inner1    def inner2():        print(‘wrapper2,after func‘)        func()  # inner1()        print(‘wrapper2 ,after func‘)    return inner2@wrapper2  # f = wrapper2(f) 里面的f新变量 = inner1 外面的f最新变量 = inner2@wrapper1  # f = wrapper1(f) 里面的f函数名  外面的f新变量=inner1def f():    print(‘in f‘)  # 3

f()  # inner2()‘‘‘wrapper2 ,before funcwrapper1 ,before funcin fwrapper1 ,after funcwrapper2 ,after func‘‘‘

原文地址:https://www.cnblogs.com/weilaixiaochaoren/p/9042649.html

时间: 2024-10-04 03:35:03

Python----多个装饰器装饰一个函数的相关文章

如何用python的装饰器定义一个像C++一样的强类型函数

Python作为一个动态的脚本语言,其函数在定义时是不需要指出参数的类型,也不需要指出函数是否有返回值.本文将介绍如何使用python的装饰器来定义一个像C++那样的强类型函数.接下去,先介绍python3中关于函数的定义. 0. python3中的函数定义 举个例子来说吧,比如如下的函数定义: 1 def fun(a:int, b=1, *c, d, e=2, **f) -> str: 2 pass 这里主要是说几点与python2中不同的点. 1)分号后面表示参数的annotation,这个

Python全栈__函数的有用信息、带参数的装饰器、多个装饰器装饰一个函数

1.函数的有用信息 代码1: 1 def login(username, password): 2 """ 3 此函数需要用户名,密码两个参数,完成的是登录的功能. 4 :return: True 登录成功. False登录失败. 5 """ 6 print(login.__name__) 7 print(login.__doc__) 8 print('登录成功...') 9 return True 10 11 print(login.__nam

5.初识python装饰器 高阶函数+闭包+函数嵌套=装饰器

一.什么是装饰器? 实际上装饰器就是个函数,这个函数可以为其他函数提供附加的功能. 装饰器在给其他函数添加功能时,不会修改原函数的源代码,不会修改原函数的调用方式. 高阶函数+函数嵌套+闭包 = 装饰器 1.1什么是高阶函数? 1.1.1函数接收的参数,包涵一个函数名. 1.1.2 函数的返回值是一个函数名. 其实这两个条件都很好满足,下面就是一个高阶函数的例子. def test1(): print "hamasaki ayumi" def test2(func): return t

python 之装饰器(用装饰器给现有函数增加新功能)

#!/usr/bin/env python # -*- coding: utf-8 -*- """ Created on Mon Nov 14 01:01:29 2016 @author: toby """ #知识点:装饰器 ''' #一.小粒子: #要求1.假如产品经历要求在每个函数之上执行之前都添加一个验证的功能,当然这里只是模拟而已,别当真哈! #已写好的现有函数如下,有1000个函数 def func1():     print 'fun

关于多个装饰器装饰一个函数执行顺序的问题

我们通过两个实例来解开我们的疑惑: 实例一: def war1(func): def inner(*args, **kwargs): print("======war1 start=====") func(*args, **kwargs) print("======war1 end=====") return inner def war2(func): def inner(*args,**kwargs): print("======war2 start==

多个装饰器装饰一个函数

#!/usr/bin/env python # -*- coding:utf-8 -*- # 作者: Apollo # 邮箱: [email protected] # 博客: http://www.zgerji.online/ def wrapper1(func): # func = f def inner1(): print('wrapper1 ,before func') func() print('wrapper1 ,after func') return inner1 def wrapp

day14 带函数的装饰器、多个装饰器装饰一个函数

一.带参数的装饰器:------开关 __author__ = 'Administrator' F=True def outer(F): def wap(fun):#gg def inner(*args,**kwargs): if F: print("inner before") ret=fun(*args,**kwargs)#gg() print("inner after") else: ret=fun(*args,**kwargs) return ret ret

Python装饰器和回调函数

1.装饰器 装饰器用来实现一种切面功能,即一些函数在调用前都必须实现的功能,比如用户是否登录,用户是否有权限这类需求,都很容易由装饰器来实现. import functools def log(func): @functools.wraps(func) def wrapper(*args, **kw): print('call %s():' % func.__name__) return func(*args, **kw) return wrapper @log def now(): print

22_装饰器、带参数的装饰器、多个装饰器装饰一个函数

一.装饰器的执行流程 1 def wrapper(func): 2 def inner(*args,**kwargs): 3 ret = func(*args,**kwargs) 4 return ret 5 return inner 6 7 @wrapper #fun = wrapper(fun) 8 def fun(s): 9 print('666') 10 return s 11 12 fun('777') 13 print(fun('777')) 14 15 ''' 16 1.程序至上而

python 第十二天2018.04.01 带参数的装饰器,,函数的有用信息

一.带参数的装饰器,函数的有用信息 def func1(): '''此函数的功能是完成的登陆的功能 return: 返回值是登陆成功与否(true,false) ''' print(333) func1() print(func1.__name__)#func1 print(func1.__doc__)#此函数的功能是完成的登陆的功能,return: 返回值是登陆成功与否 打印函数名 from functools import wraps def wrapper(f): @wraps(f) de