# 带参数的装饰器def startEnd(fun): def wraper(name): print("!!!!!!!!!!!!start!!!!!!!!!") fun(name) print("!!!!!!!!!!!!!end!!!!!!!!!") return wraper# 返回值是wraper函数# hello()相当于执行wraper()@startEnddef hello(name): print("hello {0}".format(name))hello("boy")# 在不改变代码的情况下,给现有的函数增加新的功能# 装饰器通过@进行使用,相当于把hello()函数作为参数# @startEnd 相当于 hello = startEnd(hello())# 当调用hello()的时候,就相当于调用了startEnd(hello())# 装饰器其实就是要你的内存地址# 重新给你封装新的内存 地址。# 你执行的时候是执行新的内存地址# a = hello# a() 相当于hello()# a = startEnd(hello)# a = hello 核心def author(mm): def hello(fun): def preHello(name): print("This author is {0}".format(mm)) print("###########start################") fun(name) print("############end#################") return preHello return hello@author("aaa") #装饰器最外面的一个传入的参数def cs(name): #装饰器传入的函数,中间那个 print("welcome {0}".format(name))# xx = author("chen")(cs)# xx("aaaavvvvv")cs("ffffffff") #装饰器最里面传入的参数# 类的定义class ActioinSelect(): def hello(self): print("hello world")# 初始化一个类 actionSelect = ActioinSelect()actionSelect.hello() #调用函数# module 类# 函数# 一个module和一个目录的区别# 属于一个包