zoukankan      html  css  js  c++  java
  • 带参数的函数装饰器

    装饰器的主要功能和装饰器的固定结构

    装饰器的主要功能:

    在不改变函数调用方式的基础上在函数的前、后添加功能。

    装饰器的固定格式:

    def timer(func):
        def inner():
           ''执行函数之前要做的''' 
        re = func(*args,**kwargs)
        '''执行函数之后要做的'''
        return re
      return inner
    #这个完全看不懂
    from functools import wraps def deco(func): @wraps(func) #加在最内层函数正上方 def wrapper(*args,**kwargs): return func(*args,**kwargs) return wrapper

    带参数的装饰器

    假如你有成千上万个函数使用了一个装饰器,现在你想把这些装饰器都取消掉,你要怎么做?

    一个一个的取消掉? 没日没夜忙活3天。。。

    过两天你领导想通了,再让你加上。。。

    #完全不搞不懂
    def outer(flag): def timer(func): def inner(*args,**kwargs): if flag: print('''执行函数之前要做的''') re = func(*args,**kwargs) if flag: print('''执行函数之后要做的''') return re return inner return timer @outer(False) def func(): print(111) func()

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

    有些时候,我们也会用到多个装饰器装饰同一个函数的情况。

    #完全看不懂
    def wrapper1(func): def inner(): print('wrapper1 ,before func') func() print('wrapper1 ,after func') return inner def wrapper2(func): def inner(): print('wrapper2 ,before func') func() print('wrapper2 ,after func') return inner @wrapper2 @wrapper1 def f(): print('in f') f()
  • 相关阅读:
    jquery 获取各种屏幕的宽度和高度
    我相信 Kenny
    C# 预览和打印出来的位置不符的问题 Kenny
    地址,数据位的一些理解:战舰板子
    OLED显示并口方式:
    __attribute__机制介绍
    大端模式 & 小端模式
    OV7670:
    STM32 Program Size: Code=29578 ROdata=4010 RWdata=488 ZIdata=1856
    DS18B20实验:神舟IV
  • 原文地址:https://www.cnblogs.com/aaronthon/p/8143603.html
Copyright © 2011-2022 走看看