zoukankan      html  css  js  c++  java
  • python 装饰器

    当我们将装饰器(@A)应用在一个函数(B1)上时,其实结果就是创建一个新的函数,B2=@A(B1) 。
    @A
    def B():
    pass
    装饰器直接卸载函数前,内部发生的过程是:
    def B1():
    pass
    B2=A(B) #装饰器修改函数定义,然后创建一个新的函数。

    不带参数的装饰器
    import functools, logging, sys
    logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)

    def debug(function):
    @functools.wraps( function)
    def loggen_function(args, **kwargs):
    logging.debug("%s(%r ,%r)", function.name, args, kwargs)
    result = function(
    args, **kwargs)
    logging.debug("%s == %r", function.name, result)
    return result
    return loggen_function

    @debug
    def ackermann(m, n):
    if m == 0: return n+1
    elif m > 0 and n == 0:
    return ackermann(m-1, n)
    elif m > 0 and n > 0:
    return ackermann(m-1, ackermann(m, n-1))
    print(ackermann(2, 4))

    带参数的装饰器
    @A(arg)
    def B():
    pass
    内部发生的过程是:
    def B():
    pass
    B=A(arg)(B)
    例:
    def decorator(config):
    def concrete_decorator(function):
    @functools.wraps(function)
    def wtapped(args, **kwargs):
    return function(
    args, **kwargs)
    return wtapped
    return concrete_decorator

  • 相关阅读:
    Docker之4---Docker存储卷与容器卷详解
    Docker之3---java业务镜像制作
    Docker之2---Dockerfile详解
    devops持续集成
    云计算之4---Cockpit
    云计算之3---OpenStack
    云计算之2---KVM
    云计算之1---介绍
    自动化运维工具-Ansible之7-roles
    mycat读写分离
  • 原文地址:https://www.cnblogs.com/lixianshengfitting/p/11927896.html
Copyright © 2011-2022 走看看