python基础之装饰器扩展和迭代器
2024-08-29 18:54:18
wraps模块
让原函数保留原来的说明信息
import time
import random
from functools import wraps
def auth(func):
'''auth information'''
@wraps(func)
def auth_user():
func()
return auth_user
@auth
def web():
'''web information'''
time.sleep(random.randrange(1,5))
print('welcome to my web index')
web()
# 查看注释信息
print(auth.__doc__)
print(help(web))
有参装饰器
def deco(auth_type='file'):
def auth(func):
def wrapper(*args,**kwargs):
if auth_type == 'file':
print('文件的认证方式')
elif auth_type == 'ldap':
print('ldap认证方式')
elif auth_type == 'mysql':
print('mysql认证方式')
else:
print('不知道的认证方式')
return wrapper
return auth
@deco(auth_type='abc') #@auth #index=auth(index)
def index():
print('welecome to index')
@deco(auth_type='ldap')
def home(name):
print('welecome %s to home page' %name)
index()
home('egon')
迭代器
迭代:
重复执行
下一次的重复执行依赖于上一次执行的结果
以下代码只满足重复执行,每下一次执行都是从头开始执行的,所以不属于迭代。
while True:
cmd=input('>>: ')
print(cmd)
以下代码满足重复执行,而且每下一次执行都是从上一次执行后的结果开始执行的,属于迭代
1
2
3
4
5
|
l = [ 'a' , 'b' , 'c' , 'd' ] count = 0 while count < len (l): print (l[count]) count + = 1 |
迭代器
python为了提供一种不依赖于索引的迭代方式,会为一些对象内置__iter__方法,obj.__iter__称为可迭代的对象。
s1='hello'
l=[1,2,3]
t=(1,2,3)
set1={1,2,3}
d={'a':1,'b':2,'c':3}
f=open('db.txt',encoding='utf-8')
字符串、元组、列表、集合、字典、文件等都是可迭代对象,迭代的过程中都能够用到迭代器。
迭代器就是obj.__iter__()得到的一个结果,每次使用obj.__next__()都能够获得一个迭代后的结果,当所有的元素都迭代后,会抛出“StopIteration”的错误提示表示没有内容可以继续迭代了。
d={'a':1,'b':2,'c':3}
i=d.__iter__() #i叫迭代器
print(i)
print(i.__next__())
print(i.__next__())
print(i.__next__())
print(i.__next__()) #StopIteration
迭代器的优缺点:
迭代器的优点
1:提供了一种不依赖于索引的取值方式
2:惰性计算。节省内存
迭代器的缺点:
1:取值不如按照索引取值方便
2:一次性的。只能往后走不能往前退
3:无法获取长度
迭代器的应用
在for循环迭代的过程中,每一次的循环都有迭代器的参与。
l=['x','y','z']
for item in l: #i=l.__iter__()
print(item)
数字是无法迭代的对象
最新文章
- WebBrowser内核指定
- ChartControl 折线图 柱状图
- 快速上手RaphaelJS--Instant RaphaelJS Starter翻译(二)
- SharePoint 2013 一些小技巧
- ubuntu14.04开启crontab日志
- MongoDB操作(.net)
- 【BJG吐槽汇】第一期 - 警惕亚马逊莫名自动扣款!千万不要进了它的坑!
- java设计模式和设计原则
- BLE简介和Android BLE编程
- Spring AspectJ的Execution表达式-备忘笔记
- ajax客户端请求与服务端响应浅谈
- Android学习总结——开篇
- python编程快速上手之第10章实践项目参考答案
- 【渗透课程】前言-揭开Web渗透与安全的面纱(必看)
- 题解:[GXOI/GZOI2019]与或和
- 使用keil5,加断点调试后,停止运行的问题
- [20181015]为什么是3秒.txt
- ERROR org.hibernate.internal.SessionImpl - HHH000346: Error during managed flush [object references an unsaved transient instance - save the transient instance before flushing: cn.itcast.domain.Custom
- linux存储管理之磁盘阵列
- 使用拷贝文件测试(BufferedInputStream,FileInputStream)
热门文章
- 使用axios请求发送数据
- 正则表达式 \w \d 的相关解读
- canvas的isPoinInPath API实现交互
- lucene中Field简介
- bootstrap中文文档阅读记录
- [转]linux tcp/ip调优
- C#或Net连接Oracle操作提示 Oracle 客户端 version 8.1.7 或更高版本报错
- centos6.5_64bit-Tomcat7安装部署
- 【CSS古话今说】-- 01.神奇的CSS-BFC在实战中的应用
- 第42章 	电源管理—实现低功耗—零死角玩转STM32-F429系列