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='\n', 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(多个可迭代对象) 
项拉链一样把多个可迭代对象合并在一起,返回一个迭代器
     将每次从不同对象中取到的元素合并成一个元组 

posted on 2017-10-08 16:22  pythonerLau  阅读(1118)  评论(0编辑  收藏  举报

导航