0
点赞
收藏
分享

微信扫一扫

python基础学习-数据库篇03

小暴龙要抱抱 2022-03-11 阅读 68
前端

数据库基础学习:

1. 闭包的功能及其使用的条件:

# 定义一个外部函数
def fun_out(num1):
    def fun_inner(num2):
        result=num1+num2;
        print("结果是",result);
# 外部函数返回了内部函数,在这里返回的内部函数就是闭包
    return fun_inner;

# 创建闭包的实例,就是相当于可以去使用外部函数的变量,此时f就是相当于闭包
f=fun_out(1);
f(2);
f(3);

# 在闭包内需要修改函数的变量的值,在此处需要使用关键字nolocal关键字
  • 装饰器的知识点:
    装饰器的定义:
    1.不修改已有函数的源代码
    2.不修改已有函数的调用方式
    3.给已有函数增加额外的功能
# 对已有函数对于额外的功能的扩展,装饰器实际上是一个闭包的函数,也就是一个函数的嵌套
# 定义装饰器
def decorator(func): # 如果闭包函数参数有且只有一个并且是函数类型,那么这个闭包函数称之为装饰器
    def inner():
        # 在内部函数里面堆已有函数进行装饰
        print("已添加登录的验证");
        func();
    return inner;

# 使用语法糖的格式进行书写装饰器,使用的格式就是@ 装饰器的名称
@ decorator
def comment():
    # 添加登录的判定
    # print("已添加登录的验证");
    print("发表评论");

# 调用装饰器对我们已有的函数进行装饰
# comment=decorator(comment);
# 在此处并不是简单的函数的调用,二十上面的变量的名称
comment();
# 装饰器的执行的时机。当当前的模块加载完成之后,装饰器立即执行,对已有的函数进行装饰

通用的装饰器的写法

ef decorator(func):
    # 使用函数装饰器的时候,内部函数的类型和要装饰的函数的类型要保持一致
    def inner(*args,**kwargs):
        print("正在执行加法运算");
        # *args把元组中的每一个数据,按照位置参数的形式进行传递
        # **kwargs把字典里的每一个键值对,按照关键字的形式的方式进行传递
        # 这里对元组和字典进行拆包,仅限于结合不定长参数的函数使用
        num=func(*args,**kwargs);
        return num;
    return inner;

将带有参数的装饰器封装到函数之后,在进行调用函数,让函数进行参数的传递,因为在装饰器中参数只能是函数的形式,不能带有其他的形式的函数

# 进行区分不同的函数执行 不同的代码
# 装饰器只能接受一个参数,并且只能是函数的类型,所以在此处直接的进行引入不合适,可以封装到函数之中、
def return_decorator(flag):
    def decorator(func):
        def inner(a,b):
            if flag=="+":
                print("正在执行加法运算");
            elif flag=="-":
                print("正在执行减法运算");
            func(a,b);
        return inner;
    # 当调用函数的时候可以返回一个装饰器,并且返回的是decorator装饰器
    return decorator;

# 减法运算
@return_decorator("+")
def add_num(a,b):
    result=a+b;
    print(result);
add_num(1,2);

# 减法计算
@return_decorator("-")
def sub_num(a,b):
    result=a-b;
    print(result);
sub_num(4,2);

使用类装饰器:
主要是看如何的进行初始化及其,如何保证数据是否可以被调用,因为在我们的函数的内部实现了调用了call方法

# 类装饰器:使用类装饰已有的函数
class MyDecorator(object):
    # 初始化的功能在此处执行。
    def __init__(self,func):
        self.func=func;
    # 实现 __call__(self, *args, **kwargs),让对象变成可以调用的对象的类型
    def __call__(self, *args, **kwargs):
        # 对已有函数进行封装
        print("课程已经讲解完成");
        self.func();
@MyDecorator
def show():
    print("快要放学了");
show();
举报

相关推荐

0 条评论