python基础之Day13

it2026-08-09  19

一、有参装饰器

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 import  time current_user = { 'user' : None } def  auth(engine = 'file' ):      def  deco(func):          def  wrapper( * args, * * kwargs)              if  current_user( 'user' ):                  res = func( * args, * * kwargs)                  return  res          user = input ( 'username>>: ' ).strip()          pwd = input ( 'password>>: ' ).strip()          if  egine = = 'file' :              if  user = = 'egon'  and  pwd = = '123' :                  print ( 'login successful' )                  current_user[ 'user' ] = user                  res = func * args, * * kwargs)                   return  res              else :                      print ( 'user orr password error' )          elif  engine  = =  'mysql' :                  print ( '基于mysql的认证' )          elif  engine  = =  'ldap' :                  print ( '基于ldap的认证' )          else :                  print ( '无法识别认证来源' )          return  wrapper      return  deco   @auth (engine = 'mysql' )  # @deco #index=deco(index) #index=wrapper def  index():      print ( 'welcome to index page' )      time.sleep( 1 )   @auth (engine = 'mysql' ) def  home(name):      print ( 'welecome %s to home page'  % name)      time.sleep( 0.5 )     index() home( 'egon' )               

 二、迭代器

什么是迭代器?

迭代器即迭代取值的工具

迭代:

  迭代是一个重复的过程,每一次重复都是基于上一次结果而来的

a)单纯的重复并不是迭代

while True:

  print(1)

b)迭代

l=['a','b','c']def iterator(item):  i=0while i < len(item):  print(l[i])  i+=1

为什么要有迭代器

基于索引的迭代器取值方式只适用于列表、元组、字符串类型

而对于没有索引的字典、集合、文件则不在适用

所以必须找到一种通用的并且不依赖索引的迭代器取值方式-----》迭代器

迭代器适用于可迭代的类型

 

可迭代对象:

在Python中但凡内置有__iter__方法的对象都是可迭代的对象

字符串、列表、元组、字典、集合、文件都是可迭代对象

 

迭代器对象:指的是既有内置__iter__方法,又有内置__next__方法的对象

执行可迭代对象的__iter__方法得到的就是内置的迭代器对象

文件对象本身就是迭代器对象

 

注:

迭代器对象一定是可迭代对象,反之则不然

一旦迭代器取值取干净,再继续取就会抛出StopIteration

 

 

for 循环:迭代器循环

in后跟的一定是可迭代对象

 

迭代器对象:指的是既内置有__iter__方法,又内置有__next__方法的对象 执行迭代器对象的__next__得到的是迭代器的下一个值 执行迭代器对象的__iter__得到的仍然是迭代器本身

 

总结迭代器对象的优缺点:优点:1、提供了一种通用的、可以不依赖索引的迭代取值方式2、迭代器对象更加节省内存

 缺点:1、迭代器的取值不如按照索引的方式更灵活,因为它只能往后取不能往前退2、无法预测迭代器值的个数

     

转载于:https://www.cnblogs.com/chicokiko/p/9202716.html

最新回复(0)