• 第四天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循环;

      生成器和迭代器是不同的对象,但都是可迭代对象;生成器可以是迭代器,但是迭代器并不一定是生成器;

  • 相关阅读:
    php用redis保存session
    php字符串常用算法--字符串加密解密
    PHP file_get_contents设置超时处理方法
    php栈数据结构和括号匹配算法
    JavaScript 函数参数传递到底是值传递还是引用传递
    JavaScript数据操作--原始值和引用值的操作本质
    JavaScript数据类型--值类型和引用类型
    js基本数据类型和typeof
    JS获取字符串实际长度(包含汉字)
    sublime的一些插件
  • 原文地址:https://www.cnblogs.com/zhangzhide/p/13090600.html
Copyright © 2020-2023  润新知