1.可迭代器对象 iterable
(1)迭代--每一次对过程的重复,每一次迭代得到的结果会作为下一次迭代的初始值
(2)可迭代器对象--具有iter函数的对象
(3)语法
"""--创建:. class可迭代对象名称: def__iter__(self): return迭代器 --使用:. for变量名in可迭代对象: #原理:迭代器 = 可迭代对象.__iter__() 语句. """ """面试题: 1.for循环的原理?
"""
#获取迭代器
it = list02.__iter__()
#循环获取下一个元素
while True:
try:
item = it.__next__()
print(item)
except Stopiteration:
break
#遇到异常停止迭代
"""
2.可以被for的条件是什么?
答:有.__iter__()方法的容器
"""
#练习
lists = ["林黛玉","贾元春","贾迎春","贾探春","贾惜春"]
iterable = lists.__iter__() #获取迭代器对象
#循环获取下一个元素
while True:
try:
temp = iterable.__next__()
print(temp)
except Stopiteration:
break #遇到异常停止迭代
#练习2
dicts = {"林黛玉":101,"贾元春":102,"贾迎春":103,"贾探春":104,"贾惜春":105}
iterable = dicts.__item__()
while True:
try:
temp = iterable.__next__()
print(temp,dicts[temp])
except StopIteration:
break
2.迭代器对象 iterator
(1)可以被next()函数调用并返回下一个值得对象
(2)语法
class 迭代器类名:
def __init__(self,聚合对象):
self.聚合对象 = 聚合对象
def __next__(self):
if 没有元素:
raise StopIteration
return 聚合对象元素
#练习 学生管理器 记录了多个学生 迭代出学生
class StudentModel:
def __init__(self,id,name,sex):
pass
class StudentManager:
def __init__(self):
self.__list_stu = []
def insert(self,stu):
if isinstance(stu,StudentModel):
self.__list_stu.append(stu)
else:
raise ValueError()
def __item__(self):
return StudentIterator(self.__list_stu) #1.返回迭代器
class StudentIterator: #迭代器
def __init__(self,lists):
self.__lists = lists
count = 0
def __next__(self):
if count
(二)生成器
1.构成 可迭代对象+迭代器
2.定义
next(循环)一次,计算一次,返回一次 动态提供数据的可迭代对象,节省内存空间
3.原理
"""
生成器语法:
def 函数():
yield 数据
for item in 函数名():
语句
"""
#1.定义Myrange类,实现range的功能 过渡版
class MyRange:
def __init__(self,end):
self.end = end
def __item__(self):
return RangeIterator(self.end)
class RangeIterator: #迭代器
def __init__(self,end):
self.__begin = 0
self.__end = end
def __next__(self):
if self.__begin
4.优缺点
优:节省内存 缺:不能使用索引、切片访问结果
5.惰性 *** 作->立即 *** 作
list_result=list(<生成器>)
6.表达式 re = (item for item in list01 if type(item) == int)#生成器对象
for item in re:
print(item)
7.生成器与迭代器关系
class 可迭代关系: def __iter__(): return 迭代器对象 class 迭代器: def __next__(): 调用 for in # 面试题: # 请简述,生成器与迭代器 # 生成器 本质就是 迭代器 + 可迭代对象. # 而可迭代对象就是为了可以迭代(for),而迭代的本质就是不断调用迭代器next方法. # 生成器最重要的特点调用一次next,计算一次结果,返回一个数据, # 这个过程称之为惰性 *** 作/延迟 *** 作. # 在海量数据下,可以大量节省内存. # 惰性 *** 作 --> 立即 *** 作(灵活获取结果) # list(生成器) 十、软件开发的目录规范
项目文件夹
bin #存放可执行文件
start.py
conf #项目的配置文件 如数据库路径、日志路径
settings.py
db #数据库文件夹
lib #共享库,公用区 common.py
core #核心代码逻辑 core.py
log #日志文件夹
api #
api.py
run.py
setup.py
requirements.txt
README
注:
-
core/:存放业务逻辑相关代码
-
api/:存放接口文件,接口主要用于为业务逻辑提供数据 *** 作。
-
db/:存放 *** 作数据库相关文件,主要用于与数据库交互
-
lib/t:存故程序中常用的自定义模块
-
conf:存放配置文件
-
run.py:程序的启动文件,一般放在项目的根目录下,因为在运行时会默认将运行文件所在的文件夹作为sys.path的第一个路径,这样就省去了处理环境变量的步骤 . setup.py:安装、部署、打包的脚本。
-
requirements.txt:存放软件依赖的外部Python包列表。 -README:项目说明文件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)