第3周需求


# 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

@login_auth
def register():
print('注册功能')
@login_auth
def login():
print('登录功能')
@login_auth
def transfer():
print('转账功能')
@login_auth
def withdraw():
print('提现功能')

register()
login()
transfer()
withdraw()


posted @ 2022-08-27 17:27  呼长喜  阅读(14)  评论(0编辑  收藏  举报