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: #只是单纯地重复,因而 ...
随机推荐
- python 之 configparser 模块
[root@linag python]# vim config.py import configparser config = configparser.ConfigParser() config[' ...
- mui单选和多选框
具体见代码: <!doctype html> <html> <head> <meta charset="UTF-8"> <ti ...
- 【Git】在GitHub或OSChina上新建项目后,如何在本地第一次push代码到服务器
场景1:将本地代码push到远程仓库上的master主分支 #初始化git,执行init命令后,默认新建本地分支master git init #关联远程仓库 git remote add origi ...
- Linux常用命令(三)查看当前计算机各方面信息
1.查看cpu: top 2.查看当前linux版本:name -a 查看当前运行的内核版本:cat /pro/version 查看发行版本信息:cat /etc/issue 查看上面所有信息:lsb ...
- Springboot引入多个yml方法
SpringBoot默认加载的是application.yml文件,所以想要引入其他配置的yml文件,就要在application.yml中激活该文件 定义一个application-resource ...
- Mint-UI
Mint-UI是基于Vue.js的移动端组件库 Mint-UI是Vue组件库,是使用Vue技术封装出来的成套的组件,可以无缝地和Vue项目进行集成开发 Mint UI官网 不同版本的安装 导入有两种方 ...
- QR 编码原理(三)
一.日本汉字(KANJI)是两个字节表示的字符码,编码的方式是将其转换为13字节的二进制码制. 转换步骤为: 1.对于JIS值为8140(hex) 到9FFC(hex)之间字符: a)将待转换的JIS ...
- SQL Server - 索引详细教程 (聚集索引,非聚集索引)
转载自:https://www.cnblogs.com/hyd1213126/p/5828937.html 作者:爱不绝迹 (一)必读:深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录. ...
- 【leetcode】893. Groups of Special-Equivalent Strings
Algorithm [leetcode]893. Groups of Special-Equivalent Strings https://leetcode.com/problems/groups-o ...
- FAT文件系统规范v1.03学习笔记---4.文件和目录数据区之长目录项
1.前言 本文主要是对Microsoft Extensible Firmware Initiative FAT32 File System Specification中文翻译版的学习笔记. 每个FAT ...