day12总结

闭包函数

闭(封闭/关闭)包(包子/把馅(闭包函数内部的变量)和皮(闭包函数内部的函数)包起来) --》返回闭包函数内部的函数

函数闭包函数:闭包函数把 闭包函数内部的变量 + 闭包函数内部的函数 这两者包裹在一起 然后通过返回值的形式返回出来

闭包函数至少也得符合函数嵌套

装饰器

装饰(新增加了一个额外的功能) 器(工具) --》 函数

装饰器的本质就是一个给函数增加功能的函数

装饰器 :1. 装饰器本身是函数,只不过它用来装饰 被装饰的函数

  1. 装饰器装饰函数 不改变被装饰函数源代码

  2. 装饰器装饰函数 不改变被装饰函数的调用方式

登录装饰器

# python装饰器语法糖(就是让代码更简洁)
username_list = []


def login_deco(func):
    def wrapper(*args, **kwargs):

        if username_list:
            print('已经登录,请勿重复登录')
            res = func(*args, **kwargs)
            return res

        username_inp = input('请输入用户名:')
        pwd_inp = input('请输入密码:')

        with open('user_info.txt', 'r', encoding='utf8') as fr:
            for user_info in fr:
                username, pwd = user_info.strip().split(':')
                if username_inp == username and pwd_inp == pwd:
                    print('登录成功')
                    username_list.append(username)

                    res = func(*args, **kwargs)
                    return res

            else:
                print('登录失败')

    return wrapper


@login_deco  # index = login_deco(index)
def index(x, y):
    print('index')
    print('x,y', x, y)

    return 123

二层装饰器:

  1. 用来装饰函数的,它本质是函数

  2. 不改变函数源代码

  3. 不改变函数调用方式

三层装饰器

username_list = []


def sanceng(role):
    def login_deco(func):
        def wrapper(*args, **kwargs):

            if username_list:
                print('已经登录,请勿重复登录')
                res = func(*args, **kwargs)
                return res

            username_inp = input('请输入用户名:')
            pwd_inp = input('请输入密码:')

            with open(f'{role}_info.txt', 'r', encoding='utf8') as fr:
                for user_info in fr:
                    username, pwd = user_info.strip().split(':')
                    if username_inp == username and pwd_inp == pwd:
                        print('登录成功')
                        username_list.append(username)

                        res = func(*args, **kwargs)
                        return res

                else:
                    print('登录失败')

        return wrapper

    return login_deco


@sanceng('admin')
def index(x, y):
    print('index')
    print('x,y', x, y)

    return 123


res = index(10, 20)

# 要记住装饰器的用途+装饰器的模板(多练);要了解装饰器至少要看3篇以上相关博客;要灵活运用至少5篇;要达到熟悉百度至少看10篇装饰器相关的博客

迭代器

可迭代对象:含有__iter__方法的就叫做可迭代对象
迭代器:含有__iter__和__next__方法的就叫做迭代器

猜你喜欢

转载自www.cnblogs.com/zhm-cyt/p/11574050.html