# 迭代器协议
# 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终结迭代(只能往下走不能往前退)
# 可迭代对象:实现了迭代器协议的对象 对象内部定义一个__iter__
# 协议是一种约定,可迭代对象实现了迭代器协议,Python的内部工具 如 for sum min max 函数等使用迭代器协议访问对象
# __iter__遵循迭代器协议,生成可迭代对象
# a='hello'
# b=a.__iter__()
# print(b.__next__())
# print(b.__next__())
# print(b.__next__())
# print(b.__next__())
# print(b.__next__())
# print(b.__next__())
###################################################生成器#################################################
# 生成器 自动实现了迭代器协议 生成器 就是可迭代对象 只能遍历一次
# 两种形式 一是函数 二是生成器表达式
# 一是函数 函数运行三种方式 next(函数) 函数.__next__ 函数.send
# 使用yield而不是return,但yield可以有多个
# 函数可以保存状态,用一次值取一次
# def a():
# yield 1,2
# yield 1, 3
#
# test = a()
# print(test.__next__())
# print(test.__next__())
# def test():
# for i in range(10):
# print('这是%s个' % i)
# yield ('第%s次暂停' % i)
# print('结束')
#
#
# a = test()
# print(a.__next__())
# print(a.__next__())
# 二是生成器表达式
# 三元表达式 只有三元 可以有两元
# name ='ale3x'
# res = '你好' if name=='alex' else '滚'
# print(res)
# 列表解析
# egg_list =[]
# for i in range(10):
# egg_list.append('鸡蛋%d' %i)
# print(egg_list)
# #等同
# l1 = ['鸡蛋%d' %i for i in range(10)]
# l2 = ['鸡蛋%d' %i for i in range(10) if i<5] #取I小于5
# print(l1)
# print(l2)
############################################################################################
# l1 = ('鸡蛋%d' %i for i in range(10)) #生成器表达式,相对列表解析更节省内存
# print(l1)
# print(l1.__next__())
# print(l1.__next__())
# def foo():
# with open('ssd','r',encoding='utf-8') as f:
# for i in f:
# yield i
# # print(i,end='')
# # a=eval(i)
# # print(type(i))
# # print(type(a))
# g=foo()
# b = eval(g.__next__())
# a = sum(eval(i)['一'] for i in g)
# print(a)
# h=foo()
# for i in h:
# b=eval(i)
# print('百分百%.2f %%' %(b['一']/a))
# def test():
# print('ddd')
# fist=yield 1
# print(2,fist)
# yield 2
#
# g = test()
# g.__next__()
# g.send('q')
# 装饰器 本质是函数 功能 为其他函数添加附加功能
# 两个原则 一 不修改被修饰函数的源代码 二 不修改被修饰函数的调用方式
# 装饰器 = 高阶函数+函数嵌套+闭包
# #####################高阶函数 满足以下条件其中一个
# 1.把函数当着参数传给另外一个函数
# 2.返回值包含函数
# ######################函数嵌套#####################
# 在函数内部定义另外的函数
# ##########################闭包######################
#
#
# def he(l):
# a = sum(i for i in l)
# return a
#
#
# print(he(range(101)))
# def foo(name):
# print('my name is %s' % name)
#
# def you():
# print('your name is %s' % name)
#
# def he():
# name = 'wendy'
# print('her name is %s' % name)
#
# he()
#
# you()
#
#
# foo('alex')
# 架子
############################加返回值#############################
import time
# def timer(func):
# def a():
# starttime=time.time()
# res=func()
# stoptime=time.time()
# print('函数运行时间是 %s' %(stoptime-starttime))
# return res
# return a
# def test():
# time.sleep(1)
# print('test函数运行结束')
#
# res = timer(test) #运行timeer函数,timeer函数返回的是a()函数的地址,res获得函数a的内存地址,所以运行res()则会运行a函数
# res()
# @timer 相当于 test = timer(test)
# @timer
# def test():
# time.sleep(1)
# print('test函数运行结束')
# return '这是test'
# a=test() #运行test()相当于运行函数a
# print(a)
########################################加参数传入################
# def timer(func):
# def a(*args,**kwargs):
# starttime=time.time()
# res=func(*args,**kwargs)
# stoptime=time.time()
# print('函数运行时间是 %s' %(stoptime-starttime))
# return res
# return a
#
# @timer
# def test(name,age):
# print(name,age)
# time.sleep(1)
# print('test函数运行结束')
# return '这是test'
# a=test('summer',18) #运行test()相当于运行函数a
#########################练习#########################
# def Islogin(func):
# def check(*args,**kwargs):
# username = input('用户名').strip()
# passwd = input('密码').strip()
# if username == 'abc' and passwd == '123':
# res = func(*args,**kwargs)
# else:
# print('用户名或密码错误')
# return check
#
#
# @Islogin
# def home(name):
# print('欢迎您 %s' %name)
# @Islogin
# def shoping_car(name):
# print('%s的购物车有' %name,'瓜子','香蕉','苹果')
# home('mm')
# shoping_car('mm')
#################################################################
user_list=[
{'name':'alex','password':'123'},
{'name':'abd','password':321},
{'name':'wendy','password':123},
{'name':'3','password':'3'},
{'name':'alexs','password':3},
]
current_login = {'usernme':None,'login':False}
def Islogin(func):
def check(*args,**kwargs):
if current_login['usernme'] and current_login['login']:
res = func(*args,**kwargs)
return res
username = input('用户名').strip()
passwd = input('密码').strip()
# print(type(passwd))
for user_dic in user_list:
# print(user_dic)
# print(user_dic['name'],type(user_dic['password']))
if username == user_dic['name'] and passwd == user_dic['password']:
current_login['usernme']=username
current_login['login']=True