閉鎖機能
クローズ(閉じた状態/オフ)バッグ(バンズ/)関数内(クロージャ変数を詰め、皮膚(内部閉鎖機能の機能)ラップ) - 「内部閉鎖機能は関数を返します
関数関数クロージャ:パッケージとその後の形式で戻り値を介して戻り、両方の機能を有する閉鎖機能+変数内部閉鎖機能の内部に閉鎖機能
クロージャは、少なくともネストされた関数に沿って機能しなければなりません
デコレーター
デコレーション(余分な機能を新たに追加)(ツール) - 「機能
自然デコレータは関数に増加した機能の関数であり、
デコレータ:1自体が装飾機能ですが、それは装飾機能を装飾するために使用されます
装飾的な装飾的な関数は、関数を装飾するためにソースコードを変更しません
装飾された機能を変更しないデコレータ装飾関数が呼び出されます
ログインデコレータ
# 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
フロアデコレータ:
装飾的な機能のために、それは本質的機能であります
この関数は、ソースコードを変更しません
関数呼び出しを変更しないでください
三のデコレータ
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__法と呼ばれるイテレータ