#2:还记得我们用函数对象的概念,制作一个函数字典的操作吗,来来来,我们有更高大上的
# 做法,在文件开头声明一个空字典,然后在每个函数前加上装饰器,完成自动添加到字典的操作
#
d={}
#有参装饰器接受的是用户输入功能对应的编号
# def index(x):
# def outter(func): #func -->login,func-->register
# d[x]=func #{'1':login,'2':regiser}
# def wrapper(*args,**kwargs):
# res=func(*args,**kwargs)
# return res
# return wrapper
# return outter
#
# @index('1') #将 1 传给x 相当于用户输入 1 选择login()功能
# def login():
# pass
#
# @index('2')
# def register():
# pass
#
# print(d)
# 3、 编写日志装饰器,实现功能如:一旦函数f1执行,
# 则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定
import time
# time.strftime('%Y-%m-%d %X')
# import time
#
# def log_v(path):
# def add_log(func):
# def wrapper(*args, **kwargs):
# #在被装饰对象调用前的操作
# res = func(*args, **kwargs) #被装饰对象的调用
# with open(path, 'at',encoding='utf-8')as log_f:
# new_time=time.strftime('%Y-%m-%d %X') #得到当前时间
# func_name=func.__name__
# log_str = f'{new_time} {func_name} run\n' #时间格式化输出
# print(log_str)
# log_f.write(log_str) #写进文件
# #被装饰对象调用后的操作
# return res
#
# return wrapper
#
# return add_log
#
#
# @log_v('log.txt') #传给path
# def func1():
# print('func1执行')
# func1()
# 4、基于迭代器的方式,用while循环迭代取值字符串、列表、元组、字典、集合、文件对象
#字符串
# a='hello world'
# a_iterator=a.__iter__()
# while True:
# try:
# print(a_iterator.__next__())
# except StopIteration:
# break
#
# #列表:
#
# l=[1,2,3]
# l_iterator=l.__iter__()
# while True:
# try:
# print(l_iterator.__next__())
# except StopIteration:
# break
#
# #元组
# t=(4,5,6)
# t_iterator=t.__iter__()
# while True:
# try:
# print(t_iterator.__next__())
# except StopIteration:
# break
#
#
# #字典
# d={'a':1,'b':2,'c':3}
# d_iterator=d.__iter__()
# while True:
# try:
# print(t_iterator.__next__())
# except StopIteration:
# break
#
# #集合
# e={'haha',250}
# e__iterator=e.__iter__()
# while True:
# try:
# print(e__iterator.__next__())
# except StopIteration:
# break
#
# with open('a.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=1):
# while start < stop:
# yield start
# start +=step
#
# g=my_range(1,5,2) #step += 2 不传值step默认值为 step += 1
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())
# print(g.__next__())