python 有参装饰器与迭代器
1、有参装饰器
模板:
def auth(x):
def deco(func):
def timmer(*args,**kwargs ):
res = func(*args,**kwargs )
return timmer
return deco 例子:
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('输入用户名<<')
pad = input('输入密码<<')
if engine =='file':
if user == 'qqc'and pad == '123':
print('login success')
current_user ['user']= user #记录用户登录的状态
res = func(*args,**kwargs)
return res
else :
print('用户名或密码错误')
elif engine == 'myspl':
print('基于mysql的认证')
elif engine == 'ldap':
print('基于ldap的认证')
else :
print('无法识别')
return wrapper
return deco
@auth(engine='file')
def index():
print('welcom to index')
time.sleep(3)
return 123
@auth(engine='file')
def home(name):
print('come on %s'%(name))
time.sleep(2) index()
home('qqc')
2、迭代器
(1)什么是迭代器?
迭代器即迭代取值的工具;迭代是一个重复的过程,每一次重复都是基于上一次的结果而来的
例子:
def x(list):
count= 0
while count<len(list):
print(list[count])
count+= 1
b = [1,2,2,3]
x(b) (2)、为什么要有迭代器
基于索引的迭代取值方式值适用于列表、元组、字符串类型
而没有索引的字典,集合,文件,则不在适用;所以必须找到一种通用的并且不依赖于索引的迭代器
取值方式》》迭代器
迭代器适用于可迭代的类型 (3)如何用迭代器
1、可迭代对象:在python中但凡内置有_iter_方法的对象都是可迭代的对象
(字符串。列表,元组。字典,集合,文件都是可迭代对象)
2、迭代器对象:指的是即内置有_iter_方法,有内置有_next_方法的对象
执行可迭代对象的_iter_方法得到的就是内置迭代器对象
(文件对象本身就是迭代器对象)
强调:迭代器对象一定是可迭代对象,反之不然
info={'name':'egon','age':18,'is_beautiful':True,'sex':'male'}
a =info.__iter__() #可迭代对象
print(a)
a1=a.__iter__() #迭代器对象
print(a1)
a2 = a1.__next__() #迭代器对象加_next_方法取值
print(a2)
a3 = a1.__next__()
print(a3)
#一旦迭代器取值取干净,再继续取就会抛出StopIteration
(4)for循环:迭代器循环
# info={'name':'egon','age':18,'is_beautiful':True,'sex':'male'}
#in后跟的一定要是可迭代的对象
# for k in info: # info_iter=info.__iter__()
# print(k)
# f=open('a.txt','r')
# for k in f:
# print(k)
(5)迭代器对象:指的是即内置有_iter_方法,有内置有_next_方法的对象
执行迭代器对象的next得到的是迭代器的下一个值
执行迭代器对象的iter方法得到的仍然是迭代器本身
(6)迭代器优点:
提供了一种通用的,可以不依赖于索引的迭代取值方式
迭代器对象更加节省内存
f= open('qqx.txt','r',encoding='utf-8')
print(f.__next__() )
print(f.__next__() ) #依次读取每一行文件
s = 'holle'
s1=iter(s) #可迭代对象
s2 = next(s1) #迭代器对象,取值
print(s2)
缺点:
迭代器的取值不如按照索引的方式更灵活,它只能让往后取,不能往前退
无法预测迭代器值的个数
names=['egon','alex_SB','wxx_SB']
iter_names= iter(names)
print(next(iter_names ))
print(next(iter_names ))
python 有参装饰器与迭代器的更多相关文章
- python函数、装饰器、迭代器、生成器
目录: 函数补充进阶 函数对象 函数的嵌套 名称空间与作用域 闭包函数 函数之装饰器 函数之迭代器 函数之生成器 内置函数 一.函数补充进阶 1.函数对象: 函数是第一类对象,即函数可以当作数据传递 ...
- python--有参装饰器、迭代器
有参装饰器的引入: import time import random from functools import wraps def timmer(func): @wraps(func) def w ...
- day14 带参装饰器、迭代器、生成器
""" 今日内容: 1.带参装饰器及warps 2.迭代器 3.生成器 """ """ # 一.带参装饰器及w ...
- day14带参装饰器,迭代器,可迭代对象 , 迭代器对象 ,for迭代器 , 枚举对象
复习 ''' 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.验证执行 开放封闭原则: 功能可以拓展,但源代码与调用方式都不可以改变 装饰 ...
- day-14带参装饰器、迭代器
带参装饰器 通常,装饰器为被装饰的函数添加新功能,需要外界的参数 -- outer参数固定一个,就是func -- inner参数固定同被装饰的函数,也不能添加新参数 -- 可以借助函数的嵌套定义, ...
- day14(带参装饰器,迭代器,生成器,枚举对象)
一,复习 ''' 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.验证执行 开放封闭原则: 功能可以拓展,但源代码与调用方式都不可以改变 ...
- python带参装饰器的改良版
简单点就是这种 def deco2(param=1): def _deco2(fun): def __deco2(*args, **kwargs): print (param) fun(*args, ...
- 跟着ALEX 学python day4集合 装饰器 生成器 迭代器 json序列化
文档内容学习于 http://www.cnblogs.com/xiaozhiqi/ 装饰器 : 定义: 装饰器 本质是函数,功能是装饰其他函数,就是为其他函数添加附加功能. 原则: 1.不能修改被装 ...
- python 函数之装饰器,迭代器,生成器
装饰器 了解一点:写代码要遵循开发封闭原则,虽然这个原则是面向对象开发,但也适用于函数式编程,简单的来说,就是已经实现的功能代码不允许被修改但 可以被扩展即: 封闭:已实现功能的代码块 开发:对扩张开 ...
随机推荐
- 80端口被占用 导致apach无法启动问题
1.查找是哪个程序占用了80端口 netstat -ano 列出所有进程 观察 “本地地址” 列 找到对应的PID 我这里是4 简单的办法,打开任务管理器,查看PID是4的 是哪个进程. 发现是Sys ...
- Tomcat使用
打开Tomcat官网 在浏览器地址栏输入: tomcat.apache.org,按回车 下载Tomcat 把目光移动至网页左边红匡处,点击Tomcat8 网页下移 点击箭头所指的链接 运行Tomcat ...
- 金蝶核算项目余额表卡号余额与天财商龙CRM卡号余额对比
金蝶核算项目余额表卡号余额与天财尚龙CRM卡号余额对比 由于历史遗留问题,财务一直不调账,修改核算科目卡号与天财商龙CRM系统一直,只能用VBA把卡号前缀修改成两边一致. 再通过,Power BI D ...
- net core 使用 rabbitmq
windows环境安装: https://www.cnblogs.com/ericli-ericli/p/5902270.html .NET Core 使用RabbitMQ https://www.c ...
- mysql如何在一张表中插入一万条数据?(用存储过程解决)
写一个存储过程,里面写一个循环,就可以了.主键你现在不是自增的,所以写语句的时候,就Insert到3个字段中. DELIMITER $$ DROP PROCEDURE IF EXISTS `proc_ ...
- Go中的panic和recover
这两个内置函数,用来处理go的运行时错误. panic用来主动抛出错误, recover用来捕获panic抛出的错误. recover()和defer一起使用, 但是recover()只有在defer ...
- 一脸懵逼学习oracle(图形化界面操作---》PLSQL图形化界面)
1:经过几天的折腾,终于将oracle安装成功,创建用户,授权等等操作,接下来就安安心心学习oracle: 安装好PLSQL图形化界面和汉化以后(过程自己百度吧,百度more and more),登录 ...
- [转] Form 表单数据处理 简单教程 formidable 使用心得
入门,高手见笑 表单数据一种是get方式, 另一种是post 方式 1.get方式 对于get方式,node处理起来非常简单 如以下代码: var urlParsed = url.parse(requ ...
- [转] 用webpack的CommonsChunkPlugin提取公共代码的3种方式
方式一,传入字符串参数 new webpack.optimize.CommonsChunkPlugin(‘common.js’), // 默认会把所有入口节点的公共代码提取出来,生成一个common. ...
- 清北合肥day1
题目: 1.给出一个由0,1组成的环 求最少多少次交换(任意两个位置)使得0,1靠在一起 n<=1000 2.两个数列,支持在第一个数列上区间+1,-1 每次花费为1 求a变成b的最小代价 n& ...