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