第四天python3 python解析式-生成器-迭代器
标准库datetime
datetime模块 对日期、时间、时间戳的处理
datetime类
类方法:
today() 返回本地时区当前时间的datetime对象;
now(tz=None) 返回当前时间的datetime对象,时间到微秒,如果tz为None,返回和today()一样;
utcnow() 没有时区的当前时间
fromtimestamp(timestamp,tz=None)从一个时间戳返回一个datetime对象
datetime对象
timestamp() 返回一个到微秒的时间戳;
时间戳:格林尼治时间1970年1月1日0点到现在的秒数;
构造方法:datetime.datetime(2020,06,10,22,00,00,79043) 模块名.类名()
year/month/day/hour/minute/second/microsecond取datetime对象的年月日时分秒及微秒
weekday() 返回星期的天,周一0,周日6
isoweekday() 返回星期的天,周一是1,周日是7;
date() 返回日志date对象
time() 返回time对象
replace() 修改并返回新的时间
isocalendar() 返回一个三元组(年、周数、周的天)
日期格式化
类方法 strptime(date_string,format) 返回datetime对象
对象方法 strftime(format) 返回字符串
字符串format格式化
timedelta对象
datetime2 = datetime1 + timedelta
datetime2 = datetime1 - timedelta
timedelta = datetime1 - datetime2
构造方法:
datetime.timedelta(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0,hours=0,weeks=0)
year = datetime.timedelta(days = 365)
total_seconds() 返回时间差的总秒数
标准库time
time.sleep(secs) 将调用线程刮起指定的秒数
时间解析推荐用datetime;
列表解析
语法:[返回值 for 元素 in 可迭代对象 if 条件]
使用中括号,内部for循环,if条件语句可选,返回一个新的列表;
生成一个列表,元素0-9,对每个元素自增1后求平方返回新的列表
用一个for循环,产生新的元素((i+1)**2),组成一个新列表;
通过for循环的方式和通过列表解析式的方式都可以生成一个新的列表,但是列表解析式的这种方式效率更高;列表解析式会做编译器优化;
优势:列表解析式是一种语法糖,编译器会优化,不会因为简写而影响效率,反而因优化提高了效率;减少工作量,减少出错,简化了代码,增强可读性;
示例:获取10以内的偶数,比较执行效率
列表解析式进阶
示例:20以内,既能被2整除,又能被3整除的数;
示例2:
生成器表达式 Generator expression
语法
(返回值for 元素 in 可迭代对象 if 条件)
列表解析式的中括号换成小括号即可
返回一个生成器
和列表解析式的区别
生成器表达式是按需计算(或称惰性求值、延迟计算),需要的时候才计算值
列表解析式是立即返回值
生成器
可迭代对象
迭代器
可以通过next()来判断是否是迭代器
生成器表达式和列表的区别
示例:
生成器表达式和列表解析式的对比:
计算方式:生成器表达式延迟计算,列表解析式立即计算;
内存占用:单从返回值本身来说,生成器表达式省内存,列表解析式返回新的列表;
生成器没有数据,内存占用极少,但是使用的时候,虽然一个个返回数据,但是合起来占用内存也差不多;
列表解析式构造新的列表需要占用内存;
计算速度:
单看计算时间,生成器表达式耗时非常短,列表解析式耗时长;
但是生成器本身并没有返回值,只返回了一个生成器对象;
列表解析式构造并返回了一个新的列表;
集合解析式
语法
{返回值 for 元素 in 可迭代对象 if 条件}
列表解析式的中括号换成大括号{ }
立即返回一个集合
字典解析式
语法
{返回值 for 元素 in 可迭代对象 if 条件}
列表解析式的中括号换成大括号{ }
使用key:value形式
立即返回一个字典
用法
{x:(x,x+1) for x in range(10)}
{x:[x,x+1] for x in range(10)}
{(x,):[x,x+1] for x in range(10)}
{[x]:[x,x+1] for x in range(10)} #错误示范
{chr(0x41+x):x**2 for x in range(10)}
{str(x):y for x in range(3) for y in range(4)}
总结:
python2 引入列表解析式
python2.4 引用生成器表达式
python3 引入集合,字典解析式,并迁移到2.7
一般来说,应该多应用解析式,简短,高效;
如果一个解析式非常复杂,难以读懂,要考虑拆解成for循环;
生成器和迭代器是不同的对象,但都是可迭代对象;生成器可以是迭代器,但是迭代器并不一定是生成器;
第四天python3 python解析式-生成器-迭代器的更多相关文章
- Python中生成器,迭代器,以及一些常用的内置函数.
知识点总结 生成器 生成器的本质就是迭代器. 迭代器:Python中提供的已经写好的工具或者通过数据转化得来的. 生成器:需要我们自己用Python代码构建的 创建生成器的三种方法: 通过生成器函数 ...
- python 容器 生成器 迭代器 总结
一.容器 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中.通常这类数据结构把所有的元素存储在内存中. >> ...
- python初识生成器 迭代器
生成器 带有 yield 的函数在 Python 中被称之为 generator(生成器) def xragns(): #定义函数生成器 print('小伙') yield ('好') #加上yiel ...
- python基础 生成器 迭代器
列表生成式: a=[1,2,3] print a b=[i*2 for i in range(10)] #i循环10次,每一个i的值乘2就是列表中的值.列表生成式 print b >>[1 ...
- Python之路迭代器协议、for循环机制、三元运算、列表解析式、生成器
Python之路迭代器协议.for循环机制.三元运算.列表解析式.生成器 一.迭代器协议 a迭代的含义 迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的 ...
- Python自动化 【第四篇】:Python基础-装饰器 生成器 迭代器 Json & pickle
目录: 装饰器 生成器 迭代器 Json & pickle 数据序列化 软件目录结构规范 1. Python装饰器 装饰器:本质是函数,(功能是装饰其它函数)就是为其他函数添加附加功能 原则: ...
- Python中生成器和迭代器的区别(代码在Python3.5下测试):
https://blog.csdn.net/u014745194/article/details/70176117 Python中生成器和迭代器的区别(代码在Python3.5下测试):Num01–& ...
- python高级之生成器&迭代器
python高级之生成器&迭代器 本机内容 概念梳理 容器 可迭代对象 迭代器 for循环内部实现 生成器 1.概念梳理 容器(container):多个元素组织在一起的数据结构 可迭代对象( ...
- 第三篇:python高级之生成器&迭代器
python高级之生成器&迭代器 python高级之生成器&迭代器 本机内容 概念梳理 容器 可迭代对象 迭代器 for循环内部实现 生成器 1.概念梳理 容器(container ...
随机推荐
- call()、apply()、arguments
一.call(),apply() 1.作为函数对象(指函数方法名,不带括号)的方法,需要通过函数对象调用:当对函数调用这两个方法时都会调用函数执行. <script> // 这个函数中,f ...
- Spring配置及依赖注入
入门 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-we ...
- 【摸鱼神器】一次搞定 vue3的 路由 + 菜单 + tabs
做一个管理后台,首先要设置路由,然后配置菜单(有时候还需要导航),再来一个动态tabs,最后加上权限判断. 这个是不是有点繁琐?尤其是路由的设置和菜单的配置,是不是很雷同?那么能不能简单一点呢?如果可 ...
- 第06组 Alpha冲刺 (2/6)
目录 1.1 基本情况 1.2 冲刺概况汇报 1.郝雷明 2. 方梓涵 3. 黄少丹 4. 董翔云 5.曾丽莉 6. 詹鑫冰 7.鲍凌函 8.杜筱 9.曹兰英 10. 吴沅静 1.3 冲刺成果展示 1 ...
- C++:接送旅客
接送旅客 时间限制:1.00sec 内存限制:128MB 题目描述: 现在,你是一家酒店的员工,你需要帮助这家酒店的旅客运送行李离开酒店.现在,你送顶层开始往下移动,为了减少电梯移动的距 ...
- redis+lua实现脚本一键查询
场景 经常需要查redis某个key的值,需要执行三条命令才能查到 redis-cli,启动redis select num,选择db get key,查询语句 需要执行三条命令才能实现某个key的查 ...
- Canvas 线性图形(五):多边形
前言 CanvasRenderingContext2D 没有提供绘制多边形的函数,所以只能由我们自己来实现绘制多边形的函数.以六边形为基础,需要用到三角函数:sin 和 cos. 点 A 坐标 (一) ...
- GDKOI 2021 Day2 TG 总结
又是爆炸的一天,炸多了本蒟蒻已经习以为常 但今天比昨天整整高了 40 分!!!!却还是没有 100 今天本蒟蒻本想模仿奆佬的打字速度,结果思路混乱让我无法开始 T1 不是吧怎么是期望 dp ,期望值怎 ...
- 如何实现Springboot+camunda+mysql的集成
本文介绍基于mysql数据库,如何实现camunda与springboot的集成,如何实现基于springboot运行camunda开源流程引擎. 一.创建springboot工程 使用IDEA工具, ...
- 一文澄清网上对 ConcurrentHashMap 的一个流传甚广的误解!
大家好,我是坤哥 上周我在极客时间某个课程看到某个讲师在讨论 ConcurrentHashMap(以下简称 CHM)是强一致性还是弱一致性时,提到这么一段话 这个解释网上也是流传甚广,那么到底对不对呢 ...