zoukankan      html  css  js  c++  java
  • python列表解析式,生成器,及部分内建函数使用方法

    标准库datetime
    需要导入datetime模块:
       import datetime
     
    datetime模块:
         对日期,时间,时间戳的处理
         datetime的类方法
                   today  ()
                   now(tz=None) 返回当前时间的datetime对象,时间到微秒,如果tz为none返回值和today()一样
                   utcnow()
                   fromtimestamp(timestamp,tz=None)从一个时间戳返回一个datemime对象
         datetime对象:
              timestamp()返回一个到微秒的时间戳
                   时间戳: 格林威治时间170年1月1日0点到现在的秒数
              datetime对象,构造方法:
                   datetime.datetime(2017,10,08,13,55,35,123456)
              year年month月day日hour时间minute分钟second秒microsecond微秒
                   replace() 返回并修改新的时间     
                   isocalendar()返回一个三元组(年,周,周的天)
     
    日期格式化:
    类方法 strptime(date_string,foamat) ,返datetime对象
    对象方法strftime(fotmat) ,返回字符串
    字符串format函数格式化
    timedelta对象:
      
        datetime2= datetime1+datedelta
         datetime2=datetime1-datedelta
         timedelta=datetime1-datetime2
         构造方法:
              datetime.timedelta(day=0,秒=0,微秒=0,毫秒=0,分=0 ,时=0,weeks=0)
              year= datetime.timedelta(day=365)
         total_seconds()返回时间差的总秒数
    time:
         time.sleep(secs) 将调用线程挂起指定的秒数
     
    列表解析:
    举例:
    生成一个列表,元素0~9,对每一个元素自增1后求平方返回新列表
    l1=list(range(10))
    l2=[]
    for i in l1:
         l2.append((i+1)**2)
    
    使用列表解析式的程序为:
    l1=list(range(10))
    l2=[(i+1)**2 for i in l1]
    print(l2)
     
    列表解析list comprehension
     
    语法:
    [返回值 for 元素 in 可迭代对象 if 条件]
            使用中括号[],内部是for循环,if条件语句可选
            返回一个新列表
    列表解析式是一种语法糖
         编译器会优化,不会因为简写而影响效率,反而优化提升效率
         减少代码量,可读性强,工作量降低,减少出错
     
    列表解析式进阶:
         列表解析式为:[expr for item in iterable if cond1 if cond2]
         自然语法为:
    ret = []
         for item in iterable:
              if cond1:
                   if cond2:
                   ret.append(expr)
    举例:
    20以内技能被2整除又能被3整除的数
    [i for i in range(20) if i%2==0 and i%3==0]
    [i for i in range(20) if i%2==0 if i%3==0]
    
    列表解析式多层循环的用法:
         列表解析式的写法:[expr for i in iterable1 for j in iterable2 ]
         自然写法:
       
     ret = []
         for i in iterable1:
              for j in iterable2:
                   ret.append(expr)
    举例
    [(x, y) for x in 'abcde' for y in range(3)]
    [[x, y] for x in 'abcde' for y in range(3)]
    [{x: y} for x in 'abcde' for y in range(3)]
    
     
    生成器表达式:
    语法
       
    返回值 for 元素 in 可迭代对象 if 条件)
         列表解析式的中括号换成小括号就是生成器表达式
         返回一个生成器
    和列表解析式的区别: 
     生成器表达式时按需计算('惰性求值',延迟计算),需要的时候才计算值
         列表解析式是立即返回值
    生成器:
         可迭代对象
         迭代器
     
    举例
     
    和列表解析式对比:
      
      计算方式:
              生成器表达式延迟计算,列表解析式立即计算
         内存占用:
              单从返回值来说,生成器表达式省内存,列表解析式返回新列表
              生成器没有数据,内存占用少,使用时,一个个返回数据,总体占用数据差不多
              列表解析式构造新的列表需要占用内存空间
         计算速度:
              单看计算时间,生成器表达式耗时短,列解析式耗时长
              但是生成器本身没有返回任何值,只返回了一个生成器对象
              列表解析式构造返回了一个新的列表
    总结:
       
     一般来说 ,多用解析式,简短 高效
         如果一个解析式非常复杂,难以理解,可以考虑拆解for循环
         生成器和迭代器时不同的对象,但都是可迭代对象
    内建函数:
    id(value)
    表示id 返回对象的唯一标识
    哈希 hash()
         返回一个对象的哈希值
    类型type()
      返回对象的类型 类型转换 float() int() bin() hex() oct() bool() list() tuple() dict() set() complex() bytes() bytearray(
    输入input([prompt])
         接收用户输入,返回一个字符串
    打印 print(*objects, sep=' ', end='
    ', file=sys.stdout, flush=False)
         打印输出,默认使用空格分割,换行结尾,输出到控制台
    对象长度 len(s)
         返回一个集合类型的元素个数
    isinstance(obj,class_or_tuple)
         判断对象obj是否属于某种类型或者元组中列出的某个类型
         isinstance(True,int)
    issubclass(cls,class_or_tuple)
         判断类型cls是否时某种类型的子类或元组中列出的某个类型的子类
         issubclass(bool,int)
    绝对值abs(x) x为数值
    最大值 max() 最小值min()
         返回可迭代对象中最大或最小值
         返回多个参数中最大或最小值
    round(x) 四舍五入六取整,rount(-0.5)
    pow(x,y) 等同于x**y
    常用函数()
    range(stop)
         从0开始到stop-1的可迭代对象;range(start,stop[,step])从start开始到stop-1步长为step的可迭代对象
    divmod (x,y) 等价于 tuple(x//y,x%y)
    sum(可迭代对象[,start]) 对可迭代对象的所有数值元素求和
         sum(1,100,2))  求1到100步进为2的元素的和值
    chr()给定一个一定范围的整数返回对应的字符
         chr(97)=a     chr(20013)=中
    ord()返回字符对应的整数
         ord('a')=97   ord('')=20013
     
    sorted(可迭代对象[元素][reverse])排序
         返回一个新的列表默认升序
         reverse是反转
       
    反转:
    reversed(seq)
         返回一个反转元素的迭代器
    枚举:
         enumerate(seq, start=0)
         迭代一个序列,返回索引数字和元素构成的二元组
         star表示索引开始的数字,默认是0
    迭代器和取元素 iter(可迭代对象)、next(可迭代对象)
         iter 将一个可迭代对象封装成一个迭代器
         next对一个迭代器取下一个元素,如果所有元素以取过,再次next会抛出StopIteration异常
    可迭代对象:
         能同过迭代一次次返回不同的元素的对象,所谓相同不是指值是否相同,而是元素在容器中是否是同一个,例如列表中的值可以重复
         可以迭代,但是未必有序,未必可索引
         可迭代对象有 : list tuple string bytes bytearray range set dict 生成器等
         可以使用成员操作符in not in,in本质山就是在遍历对象

    迭代器:

    特殊的对象,一定是可迭代对象,具备可迭代对象的特征
         通过iter法国法把一个可迭代对象封装成迭代器
         通过next方法,迭代迭代器对象
         生成器对象,就是迭代器对象
    拉链函数zip(多个可迭代对象) 
    项拉链一样把多个可迭代对象合并在一起,返回一个迭代器
         将每次从不同对象中取到的元素合并成一个元组 
  • 相关阅读:
    log4j(二)——如何控制日志信息的输出?
    Java生成指定范围内的工具类
    JavaBean和Map转换封装类
    cron表达式详解
    数据库主键按照固定前缀生成工具类
    邮件发送工具类
    NFC
    牛逼辩论
    快速排序
    希尔排序
  • 原文地址:https://www.cnblogs.com/spidermansam/p/7637711.html
Copyright © 2011-2022 走看看