标准库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解析式-生成器-迭代器的更多相关文章

  1. Python中生成器,迭代器,以及一些常用的内置函数.

    知识点总结 生成器 生成器的本质就是迭代器. 迭代器:Python中提供的已经写好的工具或者通过数据转化得来的. 生成器:需要我们自己用Python代码构建的 创建生成器的三种方法: 通过生成器函数 ...

  2. python 容器 生成器 迭代器 总结

    一.容器 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中.通常这类数据结构把所有的元素存储在内存中. >> ...

  3. python初识生成器 迭代器

    生成器 带有 yield 的函数在 Python 中被称之为 generator(生成器) def xragns(): #定义函数生成器 print('小伙') yield ('好') #加上yiel ...

  4. python基础 生成器 迭代器

    列表生成式: a=[1,2,3] print a b=[i*2 for i in range(10)] #i循环10次,每一个i的值乘2就是列表中的值.列表生成式 print b >>[1 ...

  5. Python之路迭代器协议、for循环机制、三元运算、列表解析式、生成器

    Python之路迭代器协议.for循环机制.三元运算.列表解析式.生成器 一.迭代器协议 a迭代的含义 迭代器即迭代的工具,那什么是迭代呢? #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的 ...

  6. Python自动化 【第四篇】:Python基础-装饰器 生成器 迭代器 Json & pickle

    目录: 装饰器 生成器 迭代器 Json & pickle 数据序列化 软件目录结构规范 1. Python装饰器 装饰器:本质是函数,(功能是装饰其它函数)就是为其他函数添加附加功能 原则: ...

  7. Python中生成器和迭代器的区别(代码在Python3.5下测试):

    https://blog.csdn.net/u014745194/article/details/70176117 Python中生成器和迭代器的区别(代码在Python3.5下测试):Num01–& ...

  8. python高级之生成器&迭代器

    python高级之生成器&迭代器 本机内容 概念梳理 容器 可迭代对象 迭代器 for循环内部实现 生成器 1.概念梳理 容器(container):多个元素组织在一起的数据结构 可迭代对象( ...

  9. 第三篇:python高级之生成器&迭代器

    python高级之生成器&迭代器   python高级之生成器&迭代器 本机内容 概念梳理 容器 可迭代对象 迭代器 for循环内部实现 生成器 1.概念梳理 容器(container ...

随机推荐

  1. docker 1.1 介绍和安装

    1.docker是什么? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现 ...

  2. 一文学会Java的交互式编程环境jshell

    什么是交互式编程环境?重点词交互,在这样的编程环境中,你每输入一行代码,环境都会给你一个反馈,这就是交互式的编程环境.这种编程环境并不太适合工程化的复杂性需求,但在一些快速验证.简单计算之类的场景下还 ...

  3. Oceanbase读写分离方案探索与优化

    [作者] 许金柱,携程资深DBA,专注于分布式数据库研究及运维. 台枫,携程高级DBA,主要负责MySQL和OceanBase的运维. [前言]    读写分离,是一种将数据库的查询操作和写入操作分离 ...

  4. 分布式任务调度ScheduleMaster

    1.什么是ScheduleMaster ScheduleMaster是分布式任务调度系统.简称:集中任务调度系统,最简单的理解ScheduleMaster,就是对不同的系统里面的调度任务做统一管理的框 ...

  5. 基于.NetCore开发博客项目 StarBlog - (9) 图片批量导入

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...

  6. 聊聊OOP中的设计原则以及访问者模式

    一  设计原则 (SOLID) 1.  S - 单一职责原则(Single Responsibllity Principle) 1.1  定义 一个类或者模块只负责完成一个职责(或功能), 认为&qu ...

  7. Flink使用Pod Template将状态快照(Checkpoint、Savepoint)存储在NFS

    背景 Flink 版本 1.13.3,使用 native k8s 部署模式,原采用 HDFS 作为状态快照(Checkpoint.Savepoint)的存储地址,但是由于仅使用了其 HDFS 作为状态 ...

  8. MySQL锁(乐观锁、悲观锁、多粒度锁)

    锁 并发事务可能出现的情况: 读-读事务并发:此时是没有问题的,读操作不会对记录又任何影响. 写-写事务并发:并发事务相继对相同的记录做出改动,因为写-写并发可能会产生脏写的情况,但是没有一个隔离级别 ...

  9. STL栈与队列

    #include<queue>// 队列 #include<stack>//栈 stack<int> s;//参数也是数据类型,这是栈的定义方式 queue< ...

  10. 判断语句、if嵌套

    判断语句 上一篇我们使用了一下if语句当然我们不止这些 我们上一个只是判断出如果满足条件会执行,那么我们想一想如果不能满足该会怎么样! 当然 还有一种语句叫做if else 他的语法格式是: if ( ...