从迭代器到递归

迭代器

迭代器并不是函数,只是一个称呼而已

python中一切皆对象(数据类型)

可迭代对象:含有__iter__方法的数据类型就叫做可迭代对象

python中除了数字类型,多有数据类型都是可迭代对象

迭代器对象

迭代器对象就是含有__iter____next__方法的对象

为什么要有迭代器对象:提供了不依赖索引取值的手段

for循环原理(for循环本质就是一个while循环,只不过是一个一定可控的while循环)

可迭代对象

可迭代对象:含有__iter__方法叫做可迭代对象--》除了数字类型都是可迭代对象--》可迭代对象使用__iter__变成迭代器

迭代器对象

迭代器对象:含有__iter____next__方法叫做迭代器对象--》只有文件时迭代器对象--》迭代器使用__iter__依然是迭代器

可迭代对象不一定是迭代器对象;迭代器对象一定是可迭代对象。

三元表达式

顾名思义就是只能赚三块钱的表达式

这只是程序员装逼用的代码,实际上不大会使用
x=10
y=20
print(x) if x>y else print(y)

如果条件成立则走这里,if条件else条件不成立走这里

列表推导式

lt=[i**2 for i in range(10)]
#    ↑这里是可以变的
print(lt)

字典生成式

lt1 = ['a', 'b', 'c']
lt2 = [1, 2, 3]

dic = {k: v ** 2 for k, v in zip(lt1, lt2)}
print(dic)


lt = list('abc')
print(lt)

用的是两个列表合成一个列表

生成器生成式

generator 本质是一个迭代器---》生成器:本质就是迭代器,生成器就是一个自定义的迭代器

g=(i for i in range(10000000))#这个是生成器生成式
print(g)#输出的是在硬盘中的位置
lt=[i for i in range(10000000)]
print(lt)#输出的是列表里面的元素

生成器表达式: 看成老母鸡,节省内存空间,用就下蛋
列表推导式: 看成一筐鸡蛋,非常占用内存空间

生成器

generator 本质是一个迭代器---》生成器:本质就是迭代器,生成器就是一个自定义的迭代器

def ge():
    yield 3#一个yield相当于一个next;暂停函数
    yield 4
    
g = ge()  # 得到一个生成器

print(g.__next__())
print(g.__next__())
print(g.__next__())

for i in g:
    print(i)
    

yield的特性

1.暂停函数

2.通知next取值

return的特性

1.终止函数

2.通过调用函数拿到值

写一个range方法

1.生成器

2.可变长参数

递归

传递;回归

函数a内部直接调用函数a本身

递归:

1.函数内部调用函数自己

2.必须要有退出条件

3.递归必须要有规律

count = 0
def a():
    global count
    count += 1
    print(count)
    if count == 5:
        return
    a()
a()
原文地址:https://www.cnblogs.com/jimGraymane/p/11578810.html