day 013总结

迭代器

可迭代对象

__iter--()方法的对象就是可迭代对象,除了数字类型之外都是可迭代对象。

迭代器对象

具有__iter__()__next__()方法的叫迭代器对象,只有文件是迭代器对象

迭代器对象提供了不依赖索引取值的手段

for循环原理

for循环本质就是一个while循环,只不过是一个可控的while循环

lt = [1,2,3]
for i in lt:   # 可迭代对象;迭代器对象  # 不依赖索引取值,而是迭代取值
    print(i)
lt=[1,2,3]
lt_iter=lt.__iter__()
while Ture:
	try:
        print(lt_iter.__next__())
    except StopIteration:
        break

1.首先使用iter把lt变成迭代器对象,对于文件也要使用iter方法把文件iter下

2.然后使用next方法进行迭代取值

3.判断stopiteration异常,遇到异常终止

迭代器对象一定是可迭代对象,可迭代对象不一定是迭代器对象

三元表达式

print(x) if x>y else print(y)

条件成立走这里 if 条件 else 条件不成立走这里

列表推导式

lt=[i for i in range(10)]
print(lt)
lt=[i**2(可以做运算) for i in range(10)]

字典生成式

lt1=['a','b','c']
lt2=[1,2,3]
dic={k:v**2 for k,v in zip(lt1,lt2)}
print(dic)#{'a': 1, 'b': 4, 'c': 9}

生成器表达式

g=(i for i in range(10))
print(g)
for i in g:
    print(i)
#<generator object <genexpr> at 0x000002D0F10E6BA0>
0
1
2
3
4
5
6
7
8
9

生成器

生成器:含有yield关键字的函数叫做生成器

def ge():
    yield 3#一个yield相当于一个next:暂停函数
    yield 4
print(ge())#<generator object ge at 0x00000246292A6BA0>
g=ge()
print(g.__next__())#3
print(g.__next__())#4

yield的函数

1.暂停战术

2.通过next取值

return的特性

1.终止函数

2.通过调用函数拿到值

def range(start):
    count=0
    while count<start:
        yield count
        count+=1
for i in range(10):
    print(1)
#0
#1
#2
#3
#4
#5
#6
#7
#8
#9

递归

递归:函数a内部直接调用函数a本身

每次递归都不会结束函数,每一次递归都会开辟内存空间,如果一直开辟内存就炸掉了,所以最多递归1000次

真正的递归必须要有 退出条件的

count=0
def a():
    global count
    count+=1
    print(count)
    if count==5:
        return 
    a()
a()
def age(x):
    if x==0:
        return 18
    x-=1
    return age(x)+2
res=age(6)
print(res)#32
posted @ 2019-09-24 15:19  风啊风啊  阅读(127)  评论(0编辑  收藏  举报