""
迭代器
什么是迭代器(iterator)
器指的某种工具,
迭代指的是更新换代的过程,例如应用程序的版本更新从1.0 变成 1.1 再1.2
迭代的目的是要根据上一个结果,产生下一个结果,这是一个重复的过程,但不是单纯的重复
迭代器就是,一种根据上一个结果得到下一个结果的工具,简单地说就是一种获取数据的工具 可迭代对象
指的就是可以使用迭代器取出数据的对象
如何判断一个对象是否可迭代,就看这个对象是否提供迭代器,通过对象调用__iter__()来获取迭代器
所有的容器类型(包括字符串)都是可迭代的 迭代器的使用
1.通过调用对象的__iter__()方法的到迭代器
2.调用迭代器的__next__()方法来获取每一个值
如何判断一个对象是不是迭代器?
迭代是为了取值,取值使用next方法,那么只要对象具备 next方法就称之为迭代器
其中文件类型比较特殊,它既是迭代器,又是可迭代对象 迭代器总结:
迭代器是一种通用的取值工具
只有具备__iter__()方法的对象才能被迭代器取值,称之为可迭代对象
迭代器是为了取值,只要具备next方法的就是迭代器,
python中迭代器同时具备iter方法和next方法 调用iter将返回迭代器自身
每一种数据类型内部的迭代实现都不各不相同 为什么用迭代器?
统一取值方式 如何使用
for ....
""" # 要获取数据 首先得要有数据
# 保存数据的方式有很多,如下
# a = 10
# print(a) # nums = [1,2,3,4,5,6,7,8]
# nums = "hello python"
# nums = {1,3,5,7,9}
# index = 0
# while index < len(nums):
# t = nums[index]
# index += 1
# print(t) # 目前每种数据类型 取值方式不统一这就有问题了,万一后续增加新的数据类型,还得学习新的取值方式,
# 每种类型还不同,最好的解决方案是:提供一种通用的取值方式使其可以搭配任何数据类型,于是就有迭代器 # 可迭代的类型 # msg = "hello python"
# # 带有__开头__结尾的方法都是内置的特殊方法,会在某个时间自动执行
# res = msg.__iter__()
# print(res)
#
# d = {}
# d.__iter__()
#
# s = set()
# s.__iter__()
#
# t = (1,)
# t.__iter__()
#
# li =[]
# li.__iter__() # # li = [1,23,4,5]
# res = li.__iter__()
# print(res)
#
# print(res.__next__())
# print(res.__next__())
# print(res.__next__())
# print(res.__next__()) # print(res.__next__()) # msg = "hello python"
# msg = [1,2,4,5]
# msg = {"name":"张无忌","sex":"女"}
# msg = {1,2,3,4,5}
# # msg = 10
# res = msg.__iter__()
# while True:
# try:
# print(res.__next__())
# except:
# print("停止迭代啦.... 没有值了")
# break
# print("over")
#
# # for
# for i in msg: # i = msg.__iter__().__next__()
# print(i)
#
# f = open("1.迭代器.py",encoding="utf-8")
# for line in f:
# print(line,end="")
#
# f.__iter__() # 文件也是可迭代对象 # f = open("1.迭代器.py",encoding="utf-8")
# f.__iter__() # 是一个可迭代对象
# f.__next__() # 是一个迭代器
# # 文件自身就是一个迭代器
# res = f.__iter__()
# print(res)
# print(f)
# print(res is f) li = [ 1,2,3,4]
res = li.__iter__()
res.__iter__() print(res)
print(res.__iter__().__iter__().__iter__().__iter__()) # msg = "hello world" # 对于for而言 所有的对象都需要先判断是否是一个可迭代对象
"""
伪代码
if data.has(__iter__):
it = data.__iter__() """ # res = msg.__iter__()
# while True:
# try:
# print(res.__next__())
# except:
# print("停止迭代啦.... 没有值了")
# break
# print("over")
#
# d = {"name":"bgon","sex":"man"}
# print(list(d.keys()).__iter__()) s = {1,2,3,4,5} while len(s) > 0:
print(s.pop())
#
# 迭代器一定是可迭代对象
# 可迭代对象对应是迭代器
生成器
迭代器,生成器,for之间的关系
for的原理是使用迭代器取值
迭代器是通过生成实现的 了解知识点:
yield的特殊用法
当你的生成器中需要外界数据参与时,生成器中如何接受外界数据?
闭包和参数都能传数据到生成器中,但是都只能接收一次值,如果想要多次传值就需要使用send函数了
send函数用于向生成器发送数据,但是要注意必须先进行初始化,也就是先调用一次__next__()方法 """ # def my_generator():
# print("start")
# yield 1
# print("over")
# yield 2
#
#
# gen = my_generator()
# print(gen)
#
# res1 = gen.__next__()
# print(res1)
# res2 = gen.__next__()
# print(res2) # 可以生成100个数字的生成器
# def get_num():
# i = 1
# while i <= 100:
# yield i
# i+=1
# #
# g = get_num()
# for i in range(100):
# print(g.__next__()) # def my_range():
# i = 0
# while i < 5:
# yield "a"
# i += 1 # res = my_range()
# for i in res: # i = res.__iter().__next__()
# print("=============")
# print(i) # for i in range(10):
# print("123") # send的使用
# def eat(name):
# print("this is a chicken name is",name)
# while True:
# food = yield "鸡蛋"
# print("收到的数据",food)
#
# c = eat("bgon")
#
#
# c.__next__() #初始化生成器
# c.send("饲料") #fasng shu
# c.send("虫子")
面向过程编程
是一种编程思想,同样的在编程界不只有这一种编程思想,还要面向对象编程等等...
编程思想没有高低之分,只有适合与不适合
你要思考的是什么样的应用程序应该采用哪种编程思想 核心在于过程,指的是在编程时时刻想着过程
过程指的就是,第一步干什么第二步干什么,完成这个任务需要哪些步骤
以及每个步骤要干什么 面向过程编程思想的优点与缺点
优点:可以将一个复杂的大问题,拆分简单的小问题,将复杂的问题简单化,流程化.
缺点:牵一发需要动全身,扩展性极差,正因如此,才有了新的编程思想,即面向对象
使用场景:对于一些对扩展性要求不高的应用程序,建议采用面向过程,例如系统内核,shell脚本程序等等
后期我们开发的应用程序大多都是直接面向用户的,需求变化非常频繁,所以这时候就需要使用面向对象了

day14 迭代器 生成器 面向过程思想的更多相关文章

  1. Python 迭代器-生成器-面向过程编程

    上节课复习:1. 函数的递归调用 在调用一个函数的过程中又直接或者间接地调用了函数本身称之为函数的递归 函数的递归调用有两个明确的阶段: 1. 回溯 一层一层地调用本身 注意: 1.每一次调用问题的规 ...

  2. day17 生成器, 面向过程, 三元表达式, 生成式

    1. 生成器 生成器:就是一种自定义的迭代器,是用来返回多次值自定义迭代器的好处:节省内存 return只能返回一次值,函数就立即结束了yield 1.可以挂起函数,保存函数的运行状态 2.可以用来返 ...

  3. day14 迭代器,生成器,函数的递归调用

    1.什么是迭代器 迭代是一个重复的过程,但是每次重复都是基于上一次重复的结果而继续 迭代取值的工具 2.为什么要用迭代器 迭代器的优点 ​ ①不依赖于索引取值 ​ ②更节省内存 缺点: ​ 1.不如按 ...

  4. OC - 1.面向过程和面向对象的思想对比

    一.面向过程 1> 思想 面向过程是一种以过程为中心的最基础编程思想,不支持面向对象的特性. 面向过程是一种模块化程序设计方法 2> 开发方法 面向过程的开发方法是以过程(也可以说是模块) ...

  5. JavaSE——面向对象与面向过程、类与对象、(属性、方法、构造器)等

    一:面向对象与面向过程 二者都是一种思想,面向对象是相对于面向过程而言的. 面向过程: 1.面向过程思想强调的是过程(动作). 2.在面向过程的开发中,其实就是面向着具体的每一个步骤和过程,把每一个步 ...

  6. python基础-面向过程编程

    面向过程编程 面向过程编程其实是一种机械式的思维方式,其核心就是"过程". 过程指的是一种解决问题的步骤,即先干什么再干什么,最后干什么. 优点:将复杂的问题流程化,进而简单化. ...

  7. 【JAVA】笔记(2)---面向过程与面向对象;类,对象;实例变量,引用;构造方法;

    面向过程与面向对象: 1.面向过程思想的典型栗子是C语言,C语言实现一个程序的流程是:在主函数中一步一步地罗列代码(定义子函数来罗列也是一样的道理),以此来实现我们想要的效果: 2.面向对象思想的典型 ...

  8. Three---面向对象与面向过程/属性和变量/关于self/一些魔法方法的使用/继承/super方法/多态

    python的面向对象 面向对象与面向过程 面向过程 面向过程思想:需要实现一个功能的时候,看重的是开发的步骤和过程,每一个步骤都需要自己亲力亲为,需要自己编写代码(自己来做) 面向对象 面向对象的三 ...

  9. python全栈开发-Day11 迭代器、生成器、面向过程编程

    一. 迭代器 一 .迭代的概念 迭代器即迭代的工具,那什么是迭代呢? 迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而 ...

随机推荐

  1. JS中attribute和property的区别

    attribute是HTML标签上的特性,它的值只能够是字符串:html 上id,class property是JavaScript里定义的对象: 如var  obj={x:1,y:2}  ,这里x, ...

  2. es6解构赋值的高级技巧

    1. 解构嵌套的对象,注意,这时p是模式,不是变量,因此不会被赋值.如果p也要作为变量赋值,可以写成下面这样. let obj = { p: [ 'Hello', { y: 'World' } ] } ...

  3. JMeter(三)遇到的问题01: 通过CSV Data Set Config参数化有中文时,显示为?

    当使用CSV Data Set Config进行参数化,内容中含有中文时,响应文本显示为? 解决办法:只需要将“file encoding”设置为“gb2312”就可以了.

  4. Maven项目配置logback

    首先,在pom.xml中加入maven依赖 <!-- log start --> <dependency> <groupId>org.slf4j</group ...

  5. 【tmos】如何在Interceptor拦截器中注入其他数据

    光是这样是获取不到weixinConfig内容的 public class WebLoginInterceptor implements HandlerInterceptor { @Autowired ...

  6. CentOS 7 安装配置 Vsftpd

    https://blog.imzhengfei.com/centos-an-zhuang-pei-zhi-vsftpd/ vsftpd 是“very secure FTP daemon”的缩写,是一款 ...

  7. 20165231 2017-2018-2《Java程序设计》课程总结

    每周作业链接汇总 预备作业一:我期待的师生关系 预备作业二:学习基础和C语言基础调查 预备作业三:linux安装及学习 第一周作业:初识JAVA,注册码云并配置Git 第二周作业:JAVA基本语法,标 ...

  8. GCC 编译优化指南【转】

    转自:http://www.jinbuguo.com/linux/optimize_guide.html 版权声明 本文作者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布. ...

  9. 虚拟化之kvm --(vnc控制台)

    作者:邓聪聪 随着日益不同的需求增多,为了满足主机供求,get到这一招虚拟化技术,以增加点见识! 1.使用yum安装: yum -y install qemu-kvm libvirt python-v ...

  10. 64位程序,利用ADO连接Oracle数据库

        刚好手头项目解决了ADO连接Oracle数据库的问题,记录下来,防止忘记. 项目情况:用32位环境完成算法动态库,结果后来需要升级到64位环境,由64位的软件来调用,则在64位设置下生成算法动 ...