一、迭代器1.什么是迭代器什么是迭代?迭代是一个重复的过程,但是每次重复都是基于上一次重复的结果而继续下列循环只是单纯的重复while True:print(l)基于索引的迭代取值l=['a','b','c']i=0while i < len(l):print(l[i])i+=1什么是迭代器?迭代取值的工具2.为什么要用迭代器迭代器优点1.提供一种不依赖索引的迭代取值方式2.更节省内存缺点:1.不如按照索引的取值方式灵活2.取值一次性的,只能往后取,无法预测值的个数3.如何用迭代器可迭代的对象:str\list\tuple\dict\set\文件对象但凡内置有__iter__方法的对象都称之为可迭代对象迭代器对象:文件对象既内置有__iter__方法又内置有__next__方法的对象都称之为迭代器对象调用可迭代对象下__iter__方法,会有一个返回值,该返回值就是内置的迭代器对象s='abcdef'l=['a','b','c']d={'k1':111,'k2':222,'k3':333}iter_d=d.__iter__()# print(iter_d)try:print(iter_d.__next__())print(iter_d.__next__())print(iter_d.__next__())print(iter_d.__next__())except StopIteration:print('取值完毕')    d={'k1':111,'k2':222,'k3':333}d={1,2,3,4,5}d=[1,2,3,4]iter_d=d.__iter__()iter_d=iter(d) #d.__iter__print(next(iter_d)) #iter_d.__next__()print(len(d))print(d.__len__())print(iter_d.__iter__().__iter__().__iter__() is iter_d)print(d.__iter__().__next__())print(d.__iter__().__next__())print(d.__iter__().__next__())while True:try:v=iter_d.__next__()print(v)except StopIteration:breakprint('第二次取值')iter_d=d.__iter__()while True:try:v=iter_d.__next__()print(v)except StopIteration:breakfor k in d:print(k)for循环的底层原理:1. 调用in后面那个值/对象的__iter__方法,拿到一个迭代器对象iter_obj2. 调用迭代器对象iter_obj.__next__()将得到的返回值赋值变量名k,循环往复直到取值完毕抛出异常StopIteration3. 捕捉异常结束循环            二、生成器生成器就是一种自定义的迭代器如何得到生成器?但凡函数内出现yield关键字,再去调用函数不会立即执行函数体代码,会得到一个返回值,该返回值就是生成器对象,即自定义的迭代器def func():print('first')yield 1print('second')yield 2print('third')yield 3g = func()print(g)res1 = next(g)print(res1)res2 = next(g)print(res2)res3 = next(g)print(res3)next(g)总结yield:1.提供一种自定义迭代器的解决方案2.yield & return相同点:都可以返回值,返回值没有类型限制\个数限制不同点:return只能返回一次值,yield却可以让函数暂停在某一个位置,可以返回多次值def my_range(start,stop,step=1):while start<stop:#5<5yield start # 3start+=step # start=5
            range(1,5,2) # 1 3for i in my_range(1,500000000000000000000,2):# 1 3print(i)三、函数的递归调用与二分法1.函数的递归调用:在调用一个函数的过程又直接或间接地调用该函数本身,称之为递归调用递归必须满足两个条件:1.每进入下一次递归调用,问题的规模都应该有所减少2.递归必须有一个明确的结束条件以下递归只是单纯的重复,没有意义def func():print(1)print(2)print(3)func()func()def bar():print('from bar')foo()def foo():print('from foo')bar()foo()递归有两个明确的阶段:1.回溯2.递推age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=18age(n)=age(n-1)+2  # n > 1age(1)=18          # n = 1def age(n):if n == 1:return 18return age(n-1)+2print(age(5))l=[1,[2,[3,[4,[5,[6,[7,[8,[9,]]]]]]]]]def func(list1):for item in list1:if type(item) is not list:print(item)else:# 如果是列表,应该...
                func(item)func(l)nums=[3,5,7,11,13,23,24,76,103,111,201,202,250,303,341]find_num=203for num in nums:if num == find_num:print('find it')breakelse:print('not exists')            2.二分法nums=[3,5,7,11,13,23,24,76,103,111,201,202,250,303,341]def binary_search(list1,find_num):print(list1)if len(list1) == 0:print('not exist')returnmid_index=len(list1) // 2if find_num > list1[mid_index]:# in the rightbinary_search(list1[mid_index + 1:],find_num)elif find_num < list1[mid_index]:# in the left
            binary_search(list1[:mid_index],find_num)else:print('find it')binary_search(nums,203)    

转载于:https://www.cnblogs.com/Nayami-L/p/10066219.html

Python学习Day14相关推荐

  1. python学习Day14 带参装饰器、可迭代对象、迭代器对象、for 迭代器工作原理、枚举对象、生成器及生成表达式...

    复习 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.返回内部函数对象---->  延迟执行, 开放封闭原则: 功能可以拓展,但源代 ...

  2. Python学习笔记:Day14 完成Web App

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  3. Python学习笔记:Day 16 编写移动App

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  4. Python学习笔记:Day15 部署Web App

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  5. Python学习:day21正则表达式

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 传送门: day01基础知识 day02知识分类 day03 ...

  6. Python学习:day20正则表达式

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 传送门: day01基础知识 day02知识分类 day03 ...

  7. pygame是python的一个库吗,python学习pygame,,基本库导入impor

    python学习pygame,,基本库导入impor 基本库导入 import pygame import sys from pygame.locals import * 初始化 pygame.ini ...

  8. python科学计数法转换_对比Python学习Go 基本数据结构

    公众号文章不方便更新,可关注底部「阅读原文」博客,文章随时更新. 本篇是「对比 Python 学习 Go」[1] 系列的第三篇,本篇文章我们来看下 Go 的基本数据结构.Go 的环境搭建,可参考之前的 ...

  9. python学习------tab补全

    python学习------tab补全   python也可以进行tab键补全 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #!/usr/bin/env  ...

  10. Python学习day5作业-ATM和购物商城

    Python学习day5作业 Python学习day5作业 ATM和购物商城 作业需求 ATM: 指定最大透支额度 可取款 定期还款(每月指定日期还款,如15号) 可存款 定期出账单 支持多用户登陆, ...

最新文章

  1. 虚拟机ubuntu14.04系统设置静态ip
  2. 皮一皮:打完疫苗千万别睡太死...
  3. 详解python正则\b和\B的区别
  4. activity5.1初始密码
  5. 378. Kth Smallest Element in a Sorted Matrix
  6. 解决在Android Studio 3.2找不到Android Device Monitor工具
  7. 【原创】为什么 Redis 重启后没有正确恢复之前的内存数据
  8. AppDelegate 方法介绍
  9. Python int() 函数
  10. 为什么现在辞职的年轻教师越来越多?
  11. 2017级C语言大作业 - 密室逃生
  12. 针对IE 7的hack写法
  13. swift编程语言和c,Swift与Objective C对比:选择更快的开发语言
  14. ydui的datetime日期选择组件
  15. 小程序实时货币汇率计算
  16. 什么是云数据库?这篇文章详细告诉你!
  17. 曼哈顿距离,欧式距离,余弦距离
  18. C++ OpenCV(一):图像读取与保存
  19. ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock
  20. SCI EI ISTP SSCI CSSCI CSCD分别代表了什么意思?

热门文章

  1. C语言把字串转换大小写的函数
  2. VirtualBox虚拟机压缩减少体积
  3. 代码中目录是否以分隔符结尾的再讨论
  4. LINUX下载编译ccrtp(未成功)
  5. 使用码云下载github的代码
  6. 世界首次发现?包名导致eclipse找不到包含main的类
  7. 航空界关于安全飞行的海恩法则
  8. 包装应由厂家回收利用
  9. 公交车宜配备逃生绳索
  10. 如何正确获取安卓外置SD卡的路径