迭代器
1.什么是迭代器:
迭代器就是用来迭代取值的工具
什么是迭代?
迭代就是一个重复的过程,但是每次重复都是基于上一次的结果进行
#单纯的重复不叫迭代
2.为何要用迭代器:
优点:
(1).找到一种通用的迭代取值方案
(2).惰性计算,节省内存
缺点;
(1)不能取指定的值
(2)迭代器对象是一次性的,一个迭代器对象值取干净了额,不能继续取了
3.如何用迭代器:
1.内置有_iter_方法的对象都是可迭代对象
字符串 列表 字典 集合 文件 都是可迭代对象
'''a'''._iter_()
[1,2,3]._iter_()
(1,2,3)._iter_()
{'x':1}._iter_()
{1,2,3,4}._iter_()
open('a.txt',mode='w')._iter_()
调用可迭代对象的_iter_()会得到一个返回值,该返回值是迭代器对象
迭代对象对象的特点:
1.内置有_next_()方法
l=[1,2,3,4,5,6]
l1 = l.__iter__() #l1=iter(l)
print(next(l1)) #1
print(next(l1)) #2
print(next(l1)) #3
print(next(iter(l))) #1
print(next(iter(l))) #1
l=[1,2,3,4,5,6]
iter_l=iter(l)
while True:
try:
print(next(iter_l))
except StopIteration:
break # 1 2 3 4 5 6
for循环工作原理
1.调用in
自定义迭代器
生成器
yield 对比 return
相同点:店铺可以返回任意类型,任意个数的值
不同: return 只能返回一次值,函数就立即结束
yield 可以返回多次值,yield可以暂停函数的运行
def func():
res=0
while True:
yield res
res +=1
if res==10000000000:
break
g=func()
for i in g:
print(i)
函数递归
1.什么是函数递归
函数递归是函数嵌套调用的一种特殊格式
即在调用一个函数时,在其内部又调用了自己
递归应该分为两个阶段
1.回溯
2.递推
2.为何要用函数递归
# def age(n):
# if n==1:
# return 18
# else:
# return age(n-1)+10
# res=age(5)
# print(res)
l=[1,2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12]]]]]]]]]]]
def func(l):
for i in l:
if type(i) is list:
func(i)
else:
print(i)
func(l)
#递归实现二分法:
nums = [1,2,3,4,5,6,333,666,7777,8888,55555,67888,144791491]
find_num = 8
def search(nums,find_num):
print(nums)
if len(nums) == 0:
print('not exists')
return
mid = len(nums) //2
if find_num > nums[mid]:
search(nums[mid+1:],find_num)
elif find_num < nums[mid]:
search(nums[:mid],find_num )
else:
print('find it')
search(nums,find_num)
三元表达式
x=input('输入x:')
y=input('输入:y')
res=x if x>y else y:
print(res)
生成式
# 列表生成式
# l = ["ok" for i in range(10) if i > 3]
# print(l)
# names = ['egon', "lxx_sb", "hxx_sb", "wxx_sb", "lxx_sb"]
# res = [name for name in names if name.endswith('sb')]
# print(res)
# names = ["lxx", "hxx", "wxx", "lxx"]
# print([name+"_sb" for name in names])
# 字典生成式
# print({"k%s" %i:i for i in range(3)})
# 集合生成式
# print({i for i in range(3)})
# 生成器表达式 元组
# res = (i for i in range(5))
# print(res)
# print(next(res))
# print(next(res))
文件读取每行数字
with open('a.txt', mode='rt', encoding='utf-8') as f:
res = sum(len(line) for line in f)
print(res)