day25 迭代器 函数递归 三元表达式

迭代器

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)

posted @ 2021-07-20 21:12  SSSagittarius  阅读(63)  评论(0)    收藏  举报