函数的双下划线方法

def hahahha():
"""测试函数"""
print('zxc')
print(hahahha.__name__) # 打印函数的名字
print(hahahha.__doc__) # 打印函数中的注释

  wraps

  被装饰函数的名字在使用装饰器后名字对应的内存地址会发生变化,通过__name__打印的名字将不再是函数自身的名字,为了解决这个问题,就要用wraps

from functools import wraps
def func(fun):
@wraps(fun) # 使被装饰的函数的名字不发生变化
def inner(*args, **kwargs):
print('前面功能')
ret = fun(*args, **kwargs)
print('后面功能')
return ret
return inner
@func
def out():
print('zxc')
print(out.__name__)

  

  带参数的装饰器

# 带参数的装饰器
import time
# FLAG = True
FLAG = False def timmer_out(flag):
def timmer(func):
def inner(*args, **kwargs):
if flag:
start = time.time()
ret = func(*args, **kwargs)
end = time.time()
print(end-start)
return ret
else:
ret = func(*args, **kwargs)
return ret
return inner
return timmer # timmer_out(FLAG) 相当于timmer 所以@timmer_out(FLAG)就相当于@timmer @timmer_out(FLAG)
def test():
time.sleep(1)
print('zxc') @timmer_out(FLAG)
def test1():
time.sleep(1)
print('zxf') test()
test1()

  多个装饰器装饰一个函数

# 多个装饰器装饰一个函数

def wrapper1(f):
def innner():
print('wrapper1装饰的func之前')
f()
print('wrapper1装饰的func之后')
return innner def wrapper2(f):
def innner():
print('wrapper2装饰的func之前')
f()
print('wrapper2装饰的func之后')
return innner @wrapper2
@wrapper1
def func():
print('func')
func()

python基础十一之装饰器进阶的更多相关文章

  1. python 基础篇 12 装饰器进阶

    本节主要内容:1. 通⽤装饰器回顾2. 函数的有⽤信息3. 带参数的装饰器4. 多个装饰器同时装饰⼀个函数 ⼀. 通⽤装饰器的回顾开闭原则: 对增加功能开放. 对修改代码封闭装饰器的作⽤: 在不改变原 ...

  2. python基础-内置装饰器classmethod和staticmethod

    面向对象编程之classmethod和staticmethod classmethod 和 staticmethod都是python内置的装饰器 classmethod 的作用:给在类内部定义的方法装 ...

  3. python基础5之装饰器

    内容概要: 一.装饰器前期知识储备 1.python解释函数代码过程: python解释器从上往下顺序解释代码,碰到函数的定义代码块不会立即执行它,而是将其放在内存中,等到该函数被调用时,才执行其内部 ...

  4. python基础篇_004_装饰器函数

    python装饰器函数 1.装饰器函数引导 功能:计算函数执行时长 import time """ 方式一: 函数首位添加时间,差值就是函数执行时间 缺点:每个函数都要加 ...

  5. python基础-面向对象(装饰器)

    属性:   @property   @method_name.setter   @method_name.deleter   三个标签都是放在方法的上面来使用,且方法名要和后续使用的   变量名字相一 ...

  6. python基础-5.2装饰器

    1.了解装饰器前准备 #### 第一波 #### def foo(): print 'foo' foo #表示是函数,仅指向了函数的地址,为执行 foo() #表示执行foo函数 #### 第二波 # ...

  7. python基础之内置装饰器

    装饰器 简介 功能与格式 内置装饰器 @classmethod @propertry @staticmethod 其它 ---------------------------------------- ...

  8. 【笔记】Python基础五:装饰器

    一,什么是装饰器 本质就是函数,功能是为其他函数添加附加功能 原则: 1,不修改被修饰函数的源代码 2,不修改被修饰函数的调用方式 例子: import time def timmer(func): ...

  9. python基础-函数之装饰器、迭代器与生成器

    1. 函数嵌套 1.1 函数嵌套调用 函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数 def bar(): print("from in the bar.") def f ...

随机推荐

  1. Django框架Day2------之Template

    [转]http://www.cnblogs.com/alex3714/articles/5457672.html Django 模版基本语法 >>> from django.temp ...

  2. Vue调试神器之Vue.js devTools

    Vue项目中使用Vue.js devTools这款调试神器,可以极大程度的提高我们的开发效率. 安装 1.打开Chrome网上应用商店安装插件(自墙),直接搜索devTools安装即可.贵宾传送阵,请 ...

  3. Hdu 4143

    题目链接 好久没有在Hdu水题了,于是乎在无聊之际还是找了一道水题, 但是看完题目之后,明显是个数学题,我还是感觉有点打触的. 因为一直对数学题没有多大信心. 分析了一下,Y^2 = X^2 + n ...

  4. SPSS操作:轻松实现1:1倾向性评分匹配(PSM)

    SPSS操作:轻松实现1:1倾向性评分匹配(PSM) 谈起临床研究,如何设立一个靠谱的对照,有时候成为整个研究成败的关键.对照设立的一个非常重要的原则就是可比性,简单说就是对照组除了研究因素外,其他的 ...

  5. 在Eclipse中添加Tomcat

    在Eclipse中开发web或开启web服务需要Tomcat的支持,在添加Tomcat之前要清楚你的Eclipse版本,如果你的Eclipse是javvEE版的就可以直接安装Tomcat,如果不是就需 ...

  6. Directx11教程(21) 修正程序最小化异常bug

    原文:Directx11教程(21) 修正程序最小化异常bug       很长时间竟然没有注意到,窗口最小化时候,程序会异常,今天调试水面程序时,随意间最小化了窗口,发现程序异常了.经过调试,原来程 ...

  7. firefox扩展开发(一) : 扩展的基本结构

    用过firefox的人肯定要安装firefox的扩展,这样才能发挥火狐的全部实力.一般扩展是一个后缀为.xpi的文件,其实这个文件就是zip格式的压缩包,压缩了一个扩展所需要的所有目录和文件,基本的目 ...

  8. java读取properties文件总结

    一.java读取properties文件总结 在java项目中,操作properties文件是经常要做的,因为很多的配置信息都会写在properties文件中,这里主要是总结使用getResource ...

  9. Android实战:手把手实现“捧腹网”APP(二)-----捧腹APP原型设计、实现框架选取

    Android实战:手把手实现"捧腹网"APP(一)-–捧腹网网页分析.数据获取 Android实战:手把手实现"捧腹网"APP(二)-–捧腹APP原型设计.实 ...

  10. 2019-4-10-VisualStudio-2019-尝试使用-C#-8.0-新的方式

    title author date CreateTime categories VisualStudio 2019 尝试使用 C# 8.0 新的方式 lindexi 2019-04-10 10:41: ...