Pythonのデコレータジョブ学習とイテレータがあり参加します

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)

おすすめ

転載: www.cnblogs.com/leilijian/p/12560564.html