作业0324

作业:

1、编写课上讲解的有参装饰器准备明天默写

def auth(db_type):
    def deco(func):
        def wrapper(*args,**kwargs):
            name=input('请输入用户名:').strip()
            pwd=input('请输入密码:').strip()

            if db_type=='file':
                print('基于文件验证')
                if name=='tank'and 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('index===>>>%s%s' %(x,y))

@auth(db_type='mysql')
def home(name):
    print('home==>>$s' % name)

@auth(db_type='ldap')
def transfer():
    print('transfer')

index(1,3)
home(tank)
transfer()

2:还记得我们用函数对象的概念,制作一个函数字典的操作吗,来来来,我们有更高大上的做法,在文件开头声明一个空字典,

然后在每个函数前加上装饰器,完成自动添加到字典的操作

dict_func={}
def func_key(func_key):
    def deco(func):
        def inner(*args,**kwargs):
            if func_key==1:
                print('1模式')
                dict_func['1']=str(func)
            elif func_key==2:
                print('2模式')
                dict_func['2'] = str(func)
            elif func_key==0:
                print('0模式')
                dict_func['0'] = str(func)
            res = func(*args, **kwargs)
            return res
        return inner
    return deco

@func_key(func_key=1)
def register():
    pass
@func_key(func_key=2)
def login():
    pass
@func_key(func_key=0)
def exit():
    pass

register()
print(dict_func)
login()
print(dict_func)
exit()
print(dict_func)

3、 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定

注意:时间格式的获取

import time
time.strftime('%Y-%m-%d %X')

def outter(func):

    def wrapper(*args,**kwargs):
        res=func(*args,**kwargs)
        with open(r'C:\Users\ccf\PycharmProjects\S14\day18\access.log', mode='a', encoding='utf-8') as f:
            f.seek(0, 2)
            f.write('{} {} run\n'.format(time.strftime('%Y-%m-%d %X'),func.__name__))
        return res

    return wrapper


@outter
def f1(x,y):
    print('大力出奇迹%s %s 号' %(x,y))

f1(1,3)

4、基于迭代器的方式,用while循环迭代取值字符串、列表、元组、字典、集合、文件对象

str1='hello'
str1_iterator=str1.__iter__()
while True:
    try:
        print(str1_iterator.__next__())
    except StopIteration:
        break

print('====>')
list1=['h','e','l','l','o']
list1_iterator=list1.__iter__()
while True:
    try:
        print(list1_iterator.__next__())
    except StopIteration:
        break

print('====>')
tuple1=('hello',['h','e','l','l','o'])
tuple1_iterator=tuple1.__iter__()
while True:
    try:
        print(tuple1_iterator.__next__())
    except StopIteration:
        break

print('====>')
dict1={'name':'egon','pwd':'123','balance':'250'}
dict1_iterator=dict1.__iter__()
while True:
    try:
        print(dict1_iterator.__next__())
    except StopIteration:
        break

print('====>')
set1={'h','e','l','l','o'}
set1_iterator=set1.__iter__()
while True:
    try:
        print(set1_iterator.__next__())
    except StopIteration:
        break

print('====>')
with open(r'C:\Users\ccf\PycharmProjects\S14\day18\adb.txt',mode='rt',encoding='utf-8') as f:
    f_iterator=f.__iter__()
    while True:
        try:
            print(f_iterator.__next__())
        except StopIteration:
            break

5、自定义迭代器实现range功能

def my_range(start,stop,step):

    while start<stop:
        yield start
        start+=step


for k in my_range(1,8,2):
    print(k)

猜你喜欢

转载自www.cnblogs.com/zuiyouyingde/p/12559505.html
今日推荐