7.2学习日记

今日内容

迭代器

什么是迭代器
就是用来迭代取值的工具
   什么是迭代
   迭代就是一个重复的过程,但是没错重复都是基于上一次结果进行的
  单纯的重复不叫迭代
       迭代:
       count = 1
       while count < 5
      print(count)
           count += 1
为何要迭代
优点:
(1)找到一种通用的迭代取值方案->for循环
   (2)惰性计算,节省内存
   缺点:
   (1)不能取指定的值,只能往后next
   (2)迭代器对象是一次性的:一个迭代器对象取干净了,不能继续取了
   
如何用迭代器



可迭代对象
1.内置_iter_()方法的对象都是可迭代对象
"aaa"._iter_()
[]._iter_()
()._iter_()
{}._iter_()
{}._iter_()
open('a.txt',mode='w')._iter_()

调用可迭代对象的_iter_() 会得到一个返回值,该返回值是迭代器对象

迭代对象的特点:
1.有内置_next_()方法
   2.有内置_iter_()方法
   

s = "a,b,c"
iter_s = s.__iter__()
print(iter_s.__next__())
print(iter_s.__next__())
print(iter_s.__next__())
print(iter_s.__next__())




dic = {"x":1,"y":2}
iter_dic = dic.__iter__()
print(iter_dic.__next__())
print(iter_dic.__next__())


for工作原理
1.调用in后面那个对象_iter_()方法,得到一个迭代器对象iter_names
2.x=next(iter_names),然后运行循环体代码
3.重复步骤2,直到去完所有的值,抛出异常,for循环会帮我们捕捉异常结束循环

生成器

yield 对比 return
相同点:都可以返回任意类型、任意个数的值
不同点:return只能返回一次值,函数就立即结束
  yield可以返回多个值,yield可以暂停函数的运行
   
函数中但凡出现yield关键字,再调用函数不会立即执行函数体代码,而会返回一个生成器对象,生成器对象本质就是一个自定义的迭代器对象
   
def finc():
   count = 0
   while True:
       print(count)
       count += 1


finc()
 
   

函数嵌套调用:函数递归

什么是函数递归
函数递归是函数嵌套调用的一种特殊格式
   即再调用一个函数时,再其内部又调用了自己
   函数递归的最大个数(不特殊设置的情况下)是1000
   python没有伪递归
   
   递归应该分为两个阶段:
  1.回溯:一层一层向下调用
       2.递推:一层一层向上回推出结果
   
为何要用函数递归
   函数递归提供了一种机会函数实现的新的循环机制
     
   l = [11,[22,[33,[44,[55,[66,[77,[88,[99]]]]]]]]]

def finc(l):
   for i in l:
       if type(i) is  list:
           finc(i)
       else:
           print(i)
           
如何使用函数递归

def age(n):
   if n == 1:
       return 18
   return age(n-1) + 10


print(age(4))


递归二分法
nums = [3,7,11,23,43,54,66,76,78,87,98]

find_num = 78

def find(nums,find_num):
   if len(nums == 0):
       print("不在列表中")
       return
mid = en.(nums) // 2
   if count > nums[mid]:
       find(nums[mid+1])
   elif count < nums[mid,find_num]:
       find(nums[:mid],find_num)
   else:
       print("找到了")

三元表达式

条件成立时的返回值 if 条件 else 条件不成立的返回值

"ok" if x>y else "no"

生产式

列表生成式           (最复杂的情况)
l = [i for i in range(10) if i>3]
   
字典生成式
{"k%s"%i:i for i in range(3)}
   
集合生成式
{i for i in range(3)}
   
生产商表达式
{i for i in range(5)}
   
   
res = sum(len(line) for line in f)

匿名函数:lambda

匿名函数与内置函数的配合使用

max

min

sorted

filter

map

reduce

面向过程编程

上一篇:算法|快速排序


下一篇:Python系列 36 迭代器