迭代器
迭代器并不是函数,只是一个称呼而已
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()