python 06.03

1.迭代器

python 中一切皆对象,但凡具有__ iter__方法的都是可迭代对象。

字符串/列表/元组/字典/集合/文件都是可迭代对象

__ next__其实是在遍历可迭代对象的元素,一旦遍历完报错

迭代器对象:同时具有__ iter__ & 可迭代对象__ next__方法的,才是迭代器对象。

可迭代对象: 拥有iter方法的对象就是可迭代对象,推导:可迭代对象不一定是迭代器对象
迭代器对象: 拥有iter方法和next方法的就是迭代器对象,推导: 迭代器对象一定是可迭代对象
文件即使可迭代对象,又是迭代器对象。

hobby_list=['run','read']
hobby_list_iter=hobby_list.__iter__()
while True:
    try:
        print (hobby_list_iter.__next__())
    except:
        break

2.三元表达式和列表推导式

不推荐使用

三元表达式

dog_name = 'xiaogou'
print('远离他') if dog_name == 'fenggou' else print('盘他')

列表推导式

lis=[i for i in range(10)]
print (lis)
lis1=[i*2 if i>5 else i for i in range(10)]
print (lis1)
lis1 = [i * 2 if i > 50 else i for i in range(100)]
print(lis1)

3.字典生成式

字典生成式

dic = {i:i**2 for i in range(10)}
print(dic)

拉链函数:

print({k:v for k,v in zip('abcd',[1,2,3,4])})

4.生成器

生成器:自定义的迭代器。

yield关键字:接收值,但是不会结束函数,而是继续运行下一行代码。

def fun():
    print ('from f1')
    yield [2,('name')]
    print('from f2')
    yield  #返回值为 None

g=fun()
print(g.__iter__())
print (g.__next__())
print (g.__next__())
print(g.__next__())

yield :接收值,但是不会结束函数,然后继续执行下一行代码,直到return

return:返回值,直接结束函数,其它的特性和yield一模一样。

生成器表达式:

tup =(i for i in range(10))
print(tup.__next__())
lis=[i for i in range(10)]
print (lis)

5.递归

递归:函数调函数自己,类似于循环,但是这个循环必须得有结束的条件。

def f2():
    print('from f2')
    f2()
f2()
def guess_age(age,count):
    age-=2
    count-=1
    if count==1:
        print(age)
        return
    guess_age(age,count)
guess_age(38,5)

def guess_age(count):
    count-=1
    if count==1:
        return 26
    return guess_age(count)+2
res = guess_age(5)
print(res)
posted @ 2019-06-03 20:50  海森t  阅读(42)  评论(0)    收藏  举报