zoukankan      html  css  js  c++  java
  • 装饰器进阶

    装饰器进阶
    查看函数内包含的函数名和日志
    func.__name__
    func.__doc__
    子主题 3
    解决办法:
    from functools import wraps
    在外层函数内顶层@wraps(f)

    开方封闭原则
    对修改是封闭的
    对扩展是开方的

    带参数的装饰器
    由来:许多个函数,经常在需要被装饰与不装饰直间切换
    格式:

    flag = True
    def outer(flag):
    def wrapper(f):
    def inner(*args, **kwargs):
    if flag:
    print('函数执行前的操作')
    ret = f(*args, **kwargs)
    if flag:
    print('函数执行后的操作')
    return ret
    return inner
    return wrapper


    @outer(flag)
    def func(*args, **kwargs):
    pass

    func()

    只需要修改flag就可以是否开启装饰器

    多个装饰器装饰一个函数
    执行步骤
    def wrapper1(f):
    def inner1(*args, **kwargs):
    print('decorator 1 before')
    ret = f(*args, **kwargs)
    print('decorator 1 after')
    return ret
    return inner1


    def wrapper2(f):
    def inner2(*args, **kwargs):
    print('decorator 2 before')
    ret = f(*args, **kwargs)
    print('decorator 2 after')
    return ret
    return inner2

    @wrapper2
    @wrapper1
    def func():
    print('-'*10)

    func()

  • 相关阅读:
    .net注册iis
    hdu 1081To The Max
    hdu 1312Red and Black
    hdu 1016Prime Ring Problem
    hdu 1159Common Subsequence
    hdu 1372Knight Moves
    hdu 1686Oulipo
    hdu 1241Oil Deposits
    hdu 1171Big Event in HDU
    hdu 4006The kth great number
  • 原文地址:https://www.cnblogs.com/2018-01-30/p/8417899.html
Copyright © 2011-2022 走看看