1、クラスを説明するために書かれた参照デコレータ準備ディクテーション明日
def auth(db_type):
def deco(func):
def wrapper(*args,**kwargs):
inp_name = input('请输入你的账号:').strip()
inp_pwd = input('请输入你的密码:').strip()
if db_type == 'file':
print('基于文件的验证')
if inp_name == 'egon' and inp_pwd == '123':
res = func(*args,**kwargs)
return res
else:
print('账号或密码错误。')
elif db_type == 'mysql':
print('基于mysql的验证')
elif db_type == 'ldap':
print('基于ldap的验证')
else:
print('不支持该db_type')
return wrapper
return deco
@auth(db_type='file')
def index(x,y):
print('from index->> {} and {}'.format(x,y))
@auth(db_type='mysql')
def home(name):
print('from home->> {}'.format(name))
@auth(db_type='ldap')
def transfer():
print('from transfer')
index(1,2)
home('vincent')
transfer()
2:私たちは関数オブジェクトの概念を使用するときに来る、来て、それを操作する辞書機能させること、忘れないでください、私たちは、ファイルの先頭の文で大、空の辞書にもっと練習があり、その後、各関数の前にデコレータを追加します自動的に辞書に追加操作を完了
cmd_dic = {'0':['退出',exit]}
def func_dic(cmd_dic,cmd_num,usage):
def deco(func):
def wrapper(*args,**kwargs):
res = func(*args,**kwargs)
return res
cmd_dic[cmd_num] = [usage,wrapper]
return wrapper
return deco
@func_dic(cmd_dic,'1','注册')
def register():
print('注册功能。')
@func_dic(cmd_dic,'2','登录')
def login():
print('登录功能。')
@func_dic(cmd_dic,'3','查询余额')
def check_balance():
print('查询余额功能。')
@func_dic(cmd_dic,'4','提现')
def withdraw():
print('提现功能。')
@func_dic(cmd_dic,'5','转账')
def transfer():
print('转账功能。')
while True:
for k,v in cmd_dic.items():
print('{:>4}: {}'.format(k,v[0]))
cmd = input('请输入命令编号:').strip()
if not cmd.isdigit():
print('必须输入数字。')
continue
if cmd in cmd_dic:
cmd_dic[cmd][1]()
else:
print('你输入的命令不存在,请重新输入。')
関数f1が行われると、メッセージ2017年7月21日11時12分11秒F1ランがログファイルパスを指定することができ、ログ・ファイルに書き込まれ:3などの機能を実現するログデコレータを書きます
注:取得時間形式
インポート時間
time.strftime( '%% Y-X-M-%のDの%')
import time
def run_log(log_path):
def deco(func):
def wrapper(*args,**kwargs):
run_time = time.strftime('%Y-%m-%d %X')
res = func(*args,**kwargs)
with open(r'{}'.format(log_path),'at',encoding='utf8') as f:
f.write('{} {} run\n'.format(run_time,str(func).split()[1]))
return res
return wrapper
return deco
@run_log(log_path='run_time.log')
def f1(x,y):
time.sleep(3)
print('from f1—>>> {} and {}'.format(x,y))
f1('AA','BB')
図4に示すように、反復的に基づいて、値の文字列は、リストは、タプルは、辞書は、ループ反復は、ファイルオブジェクトを設定しながら
1)文字列
str1 = 'addesdels'
str1_iterator = iter(str1)
while True:
try:
print(next(str1_iterator))
except StopIteration:
break
2)一覧
list1 = [2,3,4,5,6,7]
list1_iterator = iter(list1)
while True:
try:
print(next(list1_iterator))
except StopIteration:
break
3)タプル
tup1 = (11,22,33,44,55,66)
tup1_iterator = iter(tup1)
while True:
try:
print(next(tup1_iterator))
except StopIteration:
break
4)辞書
dic1 = {'name':'egon','age':18,'gender':'male'}
dic1_iterator = iter(dic1)
while True:
try:
print(next(dic1_iterator))
except StopIteration:
break
5)コレクション
s1 = {111,222,333,444,555,777}
s1_iterator = iter(s1)
while True:
try:
print(next(s1_iterator))
except StopIteration:
break
6)ファイルオブジェクト
with open('db.txt','rt',encoding='utf8') as f:
while True:
try:
print(next(f),end='')
except StopIteration:
break
5、カスタムイテレータは、レンジ機能を実装します
def my_range(start,stop,step=1):
while start<stop:
yield start
start += step
for i in my_range(2,10):
print(i)