Python编程知识

装饰器 :详细请看:https://www.runoob.com/w3cnote/python-func-decorators.html#:~:text=%E8%A3%85%E9%A5%B0%E5%99%A8%E6%9C%AC%E8%B4%A8%E4%B8%8A%E6%98%AF%E4%B8%80%E4%B8%AA%20Python%20%E5%87%BD%E6%95%B0%E6%88%96%E7%B1%BB%EF%BC%8C%E5%AE%83%E5%8F%AF%E4%BB%A5%E8%AE%A9%E5%85%B6%E4%BB%96%E5%87%BD%E6%95%B0%E6%88%96%E7%B1%BB%E5%9C%A8%E4%B8%8D%E9%9C%80%E8%A6%81%E5%81%9A%E4%BB%BB%E4%BD%95%E4%BB%A3%E7%A0%81%E4%BF%AE%E6%94%B9%E7%9A%84%E5%89%8D%E6%8F%90%E4%B8%8B%E5%A2%9E%E5%8A%A0%E9%A2%9D%E5%A4%96%E5%8A%9F%E8%83%BD%EF%BC%8C%E8%A3%85%E9%A5%B0%E5%99%A8%E7%9A%84%E8%BF%94%E5%9B%9E%E5%80%BC%E4%B9%9F%E6%98%AF%E4%B8%80%E4%B8%AA%E5%87%BD%E6%95%B0%2F%E7%B1%BB%E5%AF%B9%E8%B1%A1%E3%80%82%20%E5%AE%83%E7%BB%8F%E5%B8%B8%E7%94%A8%E4%BA%8E%E6%9C%89%E5%88%87%E9%9D%A2%E9%9C%80%E6%B1%82%E7%9A%84%E5%9C%BA%E6%99%AF%EF%BC%8C%E6%AF%94%E5%A6%82%EF%BC%9A%E6%8F%92%E5%85%A5%E6%97%A5%E5%BF%97%E3%80%81%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95%E3%80%81%E4%BA%8B%E5%8A%A1%E5%A4%84%E7%90%86%E3%80%81%E7%BC%93%E5%AD%98%E3%80%81%E6%9D%83%E9%99%90%E6%A0%A1%E9%AA%8C%E7%AD%89%E5%9C%BA%E6%99%AF%EF%BC%8C%E8%A3%85%E9%A5%B0%E5%99%A8%E6%98%AF%E8%A7%A3%E5%86%B3%E8%BF%99%E7%B1%BB%E9%97%AE%E9%A2%98%E7%9A%84%E7%BB%9D%E4%BD%B3%E8%AE%BE%E8%AE%A1%E3%80%82%20%E6%9C%89%E4%BA%86%E8%A3%85%E9%A5%B0%E5%99%A8%EF%BC%8C%E6%88%91%E4%BB%AC%E5%B0%B1%E5%8F%AF%E4%BB%A5%E6%8A%BD%E7%A6%BB%E5%87%BA%E5%A4%A7%E9%87%8F%E4%B8%8E%E5%87%BD%E6%95%B0%E5%8A%9F%E8%83%BD%E6%9C%AC%E8%BA%AB%E6%97%A0%E5%85%B3%E7%9A%84%E9%9B%B7%E5%90%8C%E4%BB%A3%E7%A0%81%E5%88%B0%E8%A3%85%E9%A5%B0%E5%99%A8%E4%B8%AD%E5%B9%B6%E7%BB%A7%E7%BB%AD%E9%87%8D%E7%94%A8%E3%80%82%20%E6%A6%82%E6%8B%AC%E7%9A%84%E8%AE%B2%EF%BC%8C%E8%A3%85%E9%A5%B0%E5%99%A8%E7%9A%84%E4%BD%9C%E7%94%A8%E5%B0%B1%E6%98%AF%E4%B8%BA%E5%B7%B2%E7%BB%8F%E5%AD%98%E5%9C%A8%E7%9A%84%E5%AF%B9%E8%B1%A1%E6%B7%BB%E5%8A%A0%E9%A2%9D%E5%A4%96%E7%9A%84%E5%8A%9F%E8%83%BD%E3%80%82%20%E5%A6%82%E6%9E%9C%E5%87%BD%E6%95%B0%20bar,%E4%B9%9F%E6%9C%89%E7%B1%BB%E4%BC%BC%E7%9A%84%E9%9C%80%E6%B1%82%EF%BC%8C%E6%80%8E%E4%B9%88%E5%81%9A%EF%BC%9F%20%E5%86%8D%E5%86%99%E4%B8%80%E4%B8%AA%20logging%20%E5%9C%A8%20bar%20%E5%87%BD%E6%95%B0%E9%87%8C%EF%BC%9F%20%E8%BF%99%E6%A0%B7%E5%B0%B1%E9%80%A0%E6%88%90%E5%A4%A7%E9%87%8F%E9%9B%B7%E5%90%8C%E7%9A%84%E4%BB%A3%E7%A0%81%EF%BC%8C%E4%B8%BA%E4%BA%86%E5%87%8F%E5%B0%91%E9%87%8D%E5%A4%8D%E5%86%99%E4%BB%A3%E7%A0%81%EF%BC%8C%E6%88%91%E4%BB%AC%E5%8F%AF%E4%BB%A5%E8%BF%99%E6%A0%B7%E5%81%9A%EF%BC%8C%E9%87%8D%E6%96%B0%E5%AE%9A%E4%B9%89%E4%B8%80%E4%B8%AA%E6%96%B0%E7%9A%84%E5%87%BD%E6%95%B0%EF%BC%9A%E4%B8%93%E9%97%A8%E5%A4%84%E7%90%86%E6%97%A5%E5%BF%97%20%EF%BC%8C%E6%97%A5%E5%BF%97%E5%A4%84%E7%90%86%E5%AE%8C%E4%B9%8B%E5%90%8E%E5%86%8D%E6%89%A7%E8%A1%8C%E7%9C%9F%E6%AD%A3%E7%9A%84%E4%B8%9A%E5%8A%A1%E4%BB%A3%E7%A0%81

简单地说:他们是修改其他函数的功能的函数。装饰器的运行顺序,就是按照函数顺序执行就可以。至于用@ 符号,是用更短的符号实现函数分装。

@a_new_decorator == a_new_decorator(a_function_requiring_decoration)。

def a_new_decorator(a_func):
def wrapTheFunction():
    print("I am doing some boring work before executing a_func()")
    a_func()
    print("I am doing some boring work after executing a_func()")
    return wrapTheFunction

def a_function_requiring_decoration():
    print("I am the function which needs some decoration to remove my foul smell")


a_function_requiring_decoration()
# outputs: "I am the function which needs some decoration to remove my foul smell"

a_function_requiring_decoration = a_new_decorator(a_function_requiring_decoration)
# now a_function_requiring_decoration is wrapped by wrapTheFunction()

a_function_requiring_decoration()
# outputs:I am doing some boring work before executing a_func()
# I am the function which needs some decoration to remove my foul smell
# I am doing some boring work after executing a_func()

原文地址:https://www.cnblogs.com/eeee/p/15457218.html