笔记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