迭代器
迭代器:不是函数,只是一个称呼而已
python中一切皆对象
为什么要有迭代器对象:提供了不依赖于索引取值的手段,只有字符串和列表都是依赖索引取值的,其他的可迭代对象都是无法依赖索引取值的
for循环原理:for循环本质就是一个while循环,只不过是一个一定可控制的while循环
-
可迭代器对象:含有-iter-方法叫做可迭代对象,除了数字类型都是可迭代对象,可迭代对象使用-iter-变成迭代器
-
迭代器对象:含有-iter-和-next-方法的叫做迭代器对象,只有文件是迭代器对象,迭代器使用-iter-依然是迭代器
可迭代对象不一定是迭代器对象;迭代器对象一定是可迭代对象
总结:可迭代的对象:Python内置str、list、tuple(元组)、dict、set(集合)、file
s='hello'
iter_s = s._iter_()
while True:
try:
print(iter_s.next_())
except StopIteration
break
h
e
l
l
o
迭代器对象:执行可迭代对象的—iter—方法,拿到的返回值就是迭代器对象
特点:
-
内置—next—方法,执行该方法会拿到迭代器对象中的一个值
-
内置有—iter—方法,执行该方法会拿到迭代器本身
文件本身就是迭代器对象
缺点:取值麻烦,只能一个一个取,并且只能往后取值,值取了就没了
无法使用len()方法取长度
三元表达式
三元表达式—》又叫三目表达式
print(x) if x>y else print(y)
条件成立就执行if条件前面的else条件不成立就执行后面的
列表推导式
Python中列表推导式用于使用其他列表创建一个列表
基本形式为:[表达式 for 变量 in 列表]
如:
想得到1-10的平方组成的list
list_1_10 = [x**2 for x in range(1,11)]
print(list_1_10)
字典生成式
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 本质是一个迭代器 ——》生成器:本质就是迭代器,生成器就是一个自定义的迭代器
生成器:含有yield关键字的函数叫做生成器、
def ge():
yield 3 一个yield相当于一个next;可以暂停函数(相当于return返回值)
yield 4
print(ge()) get()得到一个生成器——》生成器本质就是迭代器
g=ge() 得到一个生成器
yield的特性:
暂停函数
通过next取值
return的特性:
终止函数
通过调用函数拿到值
生成器生成式
generator 本质是一个迭代器 ——》生成器:本质就是迭代器,生成器就是一个自定义的迭代器
生成器表达式:看成老母鸡,节省内存空间,用的时候就下蛋
列表推导式:看成一筐鸡蛋,非常占用内存空间
递归
递归就是函数a内部直接调用函数a本身
每一次递归,会不会结束函数?不会,并且每一次递归都会开辟内存空间,如果一直开辟内存就会炸掉,所以最多递归1000次
真正的递归必须得有退出条件
count = 0
def a():
global count
count +=1
print(count)
if count == 5:
return
a()
a()
运行结果:
1
2
3
4
5
递归:
- 函数内部调用函数自己
- 必须要有退出条件
- 递归必须要有规律
def a():
x=1
print(x)
a()
a()