>  Q&A  >  본문

python - 函数签名问题

def now():
    print('2016-06-03')
def log(text):
    def decorator(func):
        def wrapper(*args, **kw):
            print('%s %s():' % (text, func.__name__))
            return func(*args, **kw)
        return wrapper
    return decorator
@log('rain:')
def now():
    print('2016-06-03')
now()

像上面那样,装饰后的函数的 __name__ 已经从 now 变成了 wrapper,为什么?

ringa_leeringa_lee2742일 전896

모든 응답(3)나는 대답할 것이다

  • 黄舟

    黄舟2017-04-17 17:54:40

    nowlog('rain:')(原来的now)

    이 되는 것과 동일합니다.

    그런 다음 __name__이 래퍼인 이유를 설명하세요

    https://docs.python.org/2.7/library/inspect.html에 따르면

    __name__: 이 함수가 정의된 이름

    그래서 __name__

    의 구체적인 정의를 바탕으로 한 것입니다.

    또 다른 예로

    으아아아

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 17:54:40

    장식된 기능은 사실 Now 기능이 아닙니다

    하지만 log("rain")(now)
    사실은 여러분이 정의한 래퍼입니다.

    이 문제에 대해 __name__ 등을 올바르게 설정할 수 있는 functools의 랩이 있습니다.

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-17 17:54:40

    으아아아

    회신하다
    0
  • 취소회신하다