迭代器/生成器
14.1.1 迭代器
迭代:更新管代。每一次重复都有一个新的结果。
人类的繁衍:(祖--父-你 -子--孙)
苹果手机:(苹果--苹果15)
每一次的重复得出(一个)新的结果
可迭代对象:可以把里面的值一个更新迭代(遍历)---python中语法上讲内置了iter方法的对象。
常见的可迭代对象:字符串,列表,元组,字典集合,都是可迭代对象。
-
迭代器:
-
可以给序列或者非序列提供迭代(取值的方式)
-
可以让我们取值方式变成一次只取一个值。
-
作用:(1)电脑内存是有限的空间。
(2)数据是无限的。
(3)通过迭代取值的方式让无限的数据在有限的空间内存储,并且同一时刻只出现一个值,可以存放无限多个数。
变量名() = iter(可迭代对象) next(迭代器) li = [1,3,5,7,9] dd = iter(li) #dd 就是迭代器 print(next(dd)) print(next(dd)) print(next(dd)) print(next(dd)) print(next(dd)) # 迭代取值的次数不能超过迭代对象的成员数 li = [1,3,5,7,9] # dd = li.__iter__() # #dd 就是迭代器 # print(dd.__next__()) # print(dd.__next__()) # print(dd.__next__()) # print(dd.__next__()) # print(dd.__next__()) # 迭代取值的次数不能超过迭代对象的成员数 # for i in li: # print(i) dd = iter(li) while True: try: res = next(dd) print(res) except StopIteration: break
14.2.1 生成器
生成器:自定义的迭代器
当函数里面有yield的关键字的关键字的时候,这个函数就是一个生成器。
迭代器变成生成器=(return+返回值)变成(yield + 返回值)
yield后面加返回值,函数不会结束而是会挂起,但是return写返回值就相当于直接结束了函数
生成器格式: def 函数(): 函数代码 yield 返回值 例子: def fun() ls=[1,4,6,8,10] for i in ls: yield ls res=fun() print(next(res)) print(next(res)) print(next(res)) print(next(res)) print(next(res)) #取值的数量不能超过函数的数量
生成器的作用:简化代码,让函数逐步输出需要的值,节省空间。
14.3.1 标准库
(1)time方法
import time print(time.time()) #这个返回的是当前时间的时间戳:可以理解为秒数,说是1970年之后经过的浮点秒数 print(time.localtime()) #返回本地时间,格式化时间元组:注意这个是返回本地的 print(time.gmtime()) #返回世界标准时间utc,格式化的时间元组 print(time.mktime()) #这个是个方法,可以将格式化时间改成浮点型时间格式 怎么使用我举个例子 print(time.mktime(time.gmtime())) print(time.mktime(time.localtime())) #只要是时间元组,那么mktime方法就可以处理成浮点型格式 时间元组格式化后的解释 tm_year=2024, 表示当前年份 tm_mon=1, 表示当前月份--12个月 tm_mday=17, 一个月当中的第几天 tm_hour=20, 小时--24小时制 tm_min=49, 分钟 tm_sec=0, 秒 tm_wday=2, 星期几-- 从0开始#换而言之,这里的2指的是星期三 tm_yday=17, 一年当中的第几天 tm_isdst=0 是不是夏令时,只要他的值不是1,他就不是夏令时。
打印日期 import time print(time.strftime(%Y年/%m月/%d日 %H时%M分%S秒,time.localtime()) %y:只有年份 %Y:世纪 %m:月 %d:天 %H时 %M分 %S秒
把时间字符串转化为时间元组 import time print(time.strptime('20240117','%Y%m%d'))
把时间字符串解析成时间元组 import time print(time.strptime('20240117','%Y%m%d')) #换成格式化元组 time.sleep(2) # 可以让我们的程序延时执行,扩里面指定参数是时间秒为单位
(2)random方法
impoort random print(random.randint(1,2)) #生成指定区间内的整数包头也包尾 print(random.random()) #生成大于0小于1的随机小数 print(random.uniform(1,5)) #生成指定区间内的随机小数,不包含1,2,3,4,5这些整数 print(ranfom.choice(['石头','剪刀','布']))
import random ls=[1,2,3,4,5,6] random.shuffle(ls) #直接打乱列表里面的排序 #下标随机 print(ls)
(3)OS文件目录方法
import os print(os.getcwd()) #返回当前项目的根目录 print(os.mkdir('deno/first')) #创建一个文件夹,当前目录文件下创建 #加个first可以在deno里再加入一个叫first的文件夹 print(os.rmdir(deno/first)) #删除空目录,空的才能删除 print(os.rename('deno','demo1')) #给文件重命名 #指定的文件如果不存在会报错的 print(os.path.exists('deno1')) #判断文件在不在当前目录,存在就返回Ture,不存在就返回False print(os.patn.jion('python','python程序','python学习第三周')) #把名字组合成路径 print(os.path.dirname(r'python\python程序\python学习第三周')) # 把路径返回上一层 print(os.path.basename(r'python\python程序\python学习第三周')) #返回路径的最后一个目录
(4)sys方法
import sys print(sys.path) #获取当前项目的环境 print(sys.argv) #获取当前文件的绝对路径 print(sys.version) #获取当前解释器的版本 print(sys.platform) #获取当前操作系统环境的
(5)json方法
json 是一种数据格式,用来存储简单的数据结构和对象的文件
可以跟web应用程序进行数据交互。
跨平台,跨语言
json---python数据交换。 import json ls = [1,2,3,4,5] print(ls) print(type(ls)) #list data = json.dumps(ls) #python的数据转换成json的数据 print(data) print(type(data)) #str ss = json.loads(data) #json数据还原成python数据 print(ss) print(type(ss)) #list
python | json |
---|---|
dict() | object(对象) |
list | array(数组) |
str | string |
int, float | number(数字) |
True | true(boolean) |
False | false(boolean) |
None | null(空) |
python的数据转换成json的数据对数据是有要求和限制的。