作业练习20200324

# 1、有参装饰器模板

from functools import wraps


def outter(extra):
    def passer(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            print(extra)
            res = func(*args, **kwargs)
            return res

        return wrapper

    return passer
# 2:还记得我们用函数对象的概念,制作一个函数字典的操作吗,来来来,我们有更高大上的做法,在文件开头声明一个空字典,
# 然后在每个函数前加上装饰器,完成自动添加到字典的操作

def join_dict(tar_dict):
    def passer(func):
        def wrapper(*args, **kwargs):
            func_key = str(len(tar_dict) + 1)
            func_value_0 = func(*args, **kwargs)
            func_value_1 = func
            func_value_list = [func_value_0, func_value_1]
            tar_dict[func_key] = func_value_list

        return wrapper

    return passer


func_dict = {}


@join_dict(func_dict)
def func1():
    print('执行功能1')
    return '功能1'


@join_dict(func_dict)
def func2():
    print('执行功能2')
    return '功能2'


@join_dict(func_dict)
def func3():
    print('执行功能3')
    return '功能3'
# 3、 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定
# 注意:时间格式的获取

import time


def return_time(file_path):
    def passer(func):
        def wrapper(*args, **kwargs):
            with open(r'{}'.format(file_path), mode='at', encoding='utf-8')as file:
                file.write(time.strftime('%Y-%m-%d %X') + '\n')
            res = func()
            return res

        return wrapper

    return passer


@return_time('03 时间日志.txt')
def func1():
    print('执行func1')
# 4、基于迭代器的方式,用while循环迭代取值字符串、列表、元组、字典、集合、文件对象

s = 'abc'
s_iter = iter(s)
while 1:
    try:
        print(next(s_iter))
    except StopIteration:
        break
l = ['a', 'b', 'c']
l_iter = iter(l)
while 1:
    try:
        print(next(l_iter))
    except StopIteration:
        break
t = ('a', 'b', 'c')
t_iter = iter(t)
while 1:
    try:
        print(next(t_iter))
    except StopIteration:
        break
d = {'a': 1, 'b': 2, 'c': 3}
d_iter = iter(d)
while 1:
    try:
        print(next(d_iter))
    except StopIteration:
        break
ss = {'a', 'b', 'c'}
ss_iter = iter(ss)
while 1:
    try:
        print(next(ss_iter))
    except StopIteration:
        break
with open(r'04 abc.txt', mode='rt', encoding='utf-8')as f:
    while 1:
        try:
            print(next(f))
        except StopIteration:
            break
# 5、自定义迭代器实现range功能

def define_range(star, end, step):
    while star < end:
        yield star
        star += 1


num_iter = define_range(1, 10, 1)
for num in num_iter:
    print(num)

猜你喜欢

转载自www.cnblogs.com/caoyu080202201/p/12560729.html