1.模块
2.包
all列表细节:
包也可以作为一个模块被另一个包包含,这种时候怎么样调用最内层包的模块呢:
3.装饰器
记住:被装饰的函数有参数,装饰器内部函数也要保持相同格式确保被装饰函数能够顺利接受到参数
使用装饰器来得到函数执行时间:
带有参数的装饰器:
# 定义一个带参数的装饰器函数
def logging(flag):
# 外部函数,接受被装饰的函数作为参数
def decorator(fn):
# 内部函数,用于包装被装饰的函数
def inner(num1, num2):
# 判断流程,根据传入的 flag 参数输出不同的提示信息
if flag == "+":
print("--正在努力加法计算--")
elif flag == "-":
print("--正在努力减法计算--")
# 调用被装饰的函数,并获取其返回结果
result = fn(num1, num2)
return result
return inner
# 返回装饰器函数
return decorator
# 使用带参数的装饰器装饰 add 函数
@logging('+')
def add(a, b):
result = a + b
return result
# 执行被装饰后的函数
result = add(1, 3)
print(result)
这块其实就是装饰器,外部的函数和定义用来接收带有的参数
最后一行其实是先执行logging("+")于是根据上面定义会返回带有加号的闭包,于是就可以带有参数使用装饰器了
4._call_方法和类装饰器
# 定义类装饰器
class Check(object):
def __init__(self, fn): # fn = comment
self.__fn = fn
def __call__(self, *args, **kwargs):
print("登陆")
self.__fn() # comment()
# 被装饰的函数
@Check # comment = Check(comment)
def comment():
print("发表评论")
comment()