day14 迭代器 生成器 面向过程思想
""
迭代器
什么是迭代器(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 迭代器 生成器 面向过程思想的更多相关文章
- Python 迭代器-生成器-面向过程编程
上节课复习:1. 函数的递归调用 在调用一个函数的过程中又直接或者间接地调用了函数本身称之为函数的递归 函数的递归调用有两个明确的阶段: 1. 回溯 一层一层地调用本身 注意: 1.每一次调用问题的规 ...
- day17 生成器, 面向过程, 三元表达式, 生成式
1. 生成器 生成器:就是一种自定义的迭代器,是用来返回多次值自定义迭代器的好处:节省内存 return只能返回一次值,函数就立即结束了yield 1.可以挂起函数,保存函数的运行状态 2.可以用来返 ...
- day14 迭代器,生成器,函数的递归调用
1.什么是迭代器 迭代是一个重复的过程,但是每次重复都是基于上一次重复的结果而继续 迭代取值的工具 2.为什么要用迭代器 迭代器的优点 ①不依赖于索引取值 ②更节省内存 缺点: 1.不如按 ...
- OC - 1.面向过程和面向对象的思想对比
一.面向过程 1> 思想 面向过程是一种以过程为中心的最基础编程思想,不支持面向对象的特性. 面向过程是一种模块化程序设计方法 2> 开发方法 面向过程的开发方法是以过程(也可以说是模块) ...
- JavaSE——面向对象与面向过程、类与对象、(属性、方法、构造器)等
一:面向对象与面向过程 二者都是一种思想,面向对象是相对于面向过程而言的. 面向过程: 1.面向过程思想强调的是过程(动作). 2.在面向过程的开发中,其实就是面向着具体的每一个步骤和过程,把每一个步 ...
- python基础-面向过程编程
面向过程编程 面向过程编程其实是一种机械式的思维方式,其核心就是"过程". 过程指的是一种解决问题的步骤,即先干什么再干什么,最后干什么. 优点:将复杂的问题流程化,进而简单化. ...
- 【JAVA】笔记(2)---面向过程与面向对象;类,对象;实例变量,引用;构造方法;
面向过程与面向对象: 1.面向过程思想的典型栗子是C语言,C语言实现一个程序的流程是:在主函数中一步一步地罗列代码(定义子函数来罗列也是一样的道理),以此来实现我们想要的效果: 2.面向对象思想的典型 ...
- Three---面向对象与面向过程/属性和变量/关于self/一些魔法方法的使用/继承/super方法/多态
python的面向对象 面向对象与面向过程 面向过程 面向过程思想:需要实现一个功能的时候,看重的是开发的步骤和过程,每一个步骤都需要自己亲力亲为,需要自己编写代码(自己来做) 面向对象 面向对象的三 ...
- python全栈开发-Day11 迭代器、生成器、面向过程编程
一. 迭代器 一 .迭代的概念 迭代器即迭代的工具,那什么是迭代呢? 迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而 ...
随机推荐
- MFCC/Filter Bank的提取流程
预加重:通过一个一阶有限激励响应高通滤波器,使信号的频谱变得平坦,不易受到有限字长效应的影响. 分帧:根据语音的短时平稳特性,语音可以以帧为单位进行处理,实验中选取的语音帧长为32ms,帧移为16ms ...
- div与 css--绝对定位和相对定位
<10-页面美化专题-div和css基础.avi> Border-topPadding-topMargin-topFloat Position #clear{Both:clear;}//浮 ...
- python初级实战-----主机在线情况监控web
背景 公司有600多台服务器,打算写一个小程序,能一眼看见哪些服务器不在线. 大体思路是: 1.把所有服务器ip存进数据库,ping命令判断服务器是否在线 2.更新数据库中ip的状态 3.简单的web ...
- neutron-----openstack网络操作
#查看子网 openstack subnet list #删除子网 openstack subnet delete name/id #查看网络 openstack network list #删除网络 ...
- IBM 3650 M3 yum upgrade后系统无法登陆问题
一.背景 IBM 3650 M3安装了centos7.2操作系统 今天yum upgrade升级centos7.6,重启系统后发现开不了机,报错如下: Failed to set MokListRT: ...
- pythonの递归锁
首先看一个例子,让我们lock = threading.Lock() 时(代码第33行),程序会卡死在这里 #!/usr/bin/env python import threading,time de ...
- [转] netstat 查看TCP状态值
转自 https://www.cnblogs.com/yuyutianxia/p/4970380.html netstat 查看TCP状态值 一.TCP 状态值 netstat -n | awk ...
- P2050 [NOI2012]美食节
题目地址:P2050 [NOI2012]美食节 先来讲一下P2053 [SCOI2007]修车(如果会做请跳过) 同一时刻有 \(N\) 位车主带着他们的爱车来到了汽车维修中心.维修中心共有 \(M\ ...
- Python3-进程
进程 什么是进程 进程调度 进程的并行与并发 进程的创建与结束 在python程序中的进程操作 守护进程 进程同步(multiprocess.Lock) 进程间通信——队列 生产者消费者模型 进程池和 ...
- Crash工具实战-变量解析【转】
转自:http://blog.chinaunix.net/uid-14528823-id-4358785.html Crash工具实战-变量解析 Crash工具用于解析Vmcore文件,Vmcore文 ...