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