迭代器

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

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()