笔记day03
上周内容回顾
- 
函数 
- 
算法 
- 
迭代器生成器 
- 
异常处理 
本周内容概要
- 
作业讲解 
- 
模块 
- 
面向对象 
本周内容详细
作业讲解
"""
讲师:JasonJi    外号:鸡哥
邮箱:18817628568@163.com
微信:15618087189、18817628568(备注来源)
"""
# 2.利用while与异常捕获 实现for循环的迭代取值的功能
# info = {'name': 'jason', 'age': 18, 'pwd': 123}
"""
for循环底层原理
    1.将in后面的数据自动调用双下iter方法转为迭代器
    2.再让迭代器反复调用双下next方法取值
    3.一旦取值完毕报错 自动处理并结束循环
"""
# res = info.__iter__()  # 可以简写为iter(info)
# print(res.__next__())  # 可以简写为next(info)
# res = info.__iter__()
# while True:
#     try:
#         print(res.__next__())
#     except StopIteration:
#         break
# 3.编写生成器模拟出range方法所有的功能
"""
range()在python3中是一个迭代器
    range(10)           0 9
    range(1,10)         1 9
    range(1,10,2)       1等差2
生成器的本质其实还是迭代器 只不过迭代器是系统自动提供的而生成器需要我们自己编写
自定义迭代器肯定要想到的关键字yield
编程技巧:如果相似的功能需求有多个那么可以先写其中的一个 然后基于这一个扩展即可
"""
# 3.1.先写两个参数的版本
# def my_range(start_num, end_num):
#     while start_num < end_num:
#         yield start_num
#         start_num += 1
# 3.2.思考如果就传一个参数
# def my_range(start_num, end_num=0):
#     if not end_num:
#         end_num = start_num
#         start_num = 0
#     while start_num < end_num:
#         yield start_num
#         start_num += 1
# 3.3.传三个参数
# def my_range(start_num, end_num=0, step=1):
#     if not end_num:
#         end_num = start_num
#         start_num = 0
#     while start_num < end_num:
#         yield start_num
#         start_num += step
# 4.编写一个用户认证装饰器
#   register login transfer withdraw
#   基本要求
#       执行每个函数的时候必须先校验身份 eg: jason 123
#   拔高练习(有点难度)
#       执行被装饰的函数 只要有一次认证成功 那么后续的校验都通过
#   提示:全局变量 记录当前用户是否认证
# 定义一个存储用户是否登录的数据字典
is_login = {
    'username':''
}
def login_auth(func_name):
    def inner(*args, **kwargs):
        # 先判断全局字典中username键是否有值 如果有说明用户已经登录成功 无需反复校验
        if is_login.get('username'):
            res = func_name(*args, **kwargs)
            return res
        # 执行被装饰函数之前可以做的操作
        username = input('username>>>:').strip()
        password = input('password>>>:').strip()
        if username == 'jason' and password == '123':
            # 记录用户登录成功的状态
            is_login['username'] = username
            res = func_name(*args, **kwargs)
            # 执行被装饰函数之后可以做的操作
            return res
        else:
            print('用户名或密码错误 没有资格执行当前函数')
    return inner
 
                    
                     
                    
                 
                    
                