Python 学习DAY 17 列表生成式,生成器,迭代器,time模块,random模块
********************************************列表生成式******************
a=[x for x in range(10)] [0,1,2,3,4,5,6,7,8,9]
a=[x*2 for x in range(10)] [0,2,4,6,8,10.....] a=[x*x for x in range(10)] 平方
def f(n):
return n**3
a=[f(x) for x in range(10)] 也可以放函数
t=('123',8)
a,b=t a='123' b=8 赋值取元组元素
********************************************生成器***************************
a=(x*2 for x in range(10)) 小括号,生成器对象 (生成器创建方式1)
next(a)==a.__next__() 拿到第一个数0,内部方法,不在明面上用
next(a)=2
next(a)=4 只能按顺序一个一个拿
生成器在创建的时候已经决定了能计算出值的个数,调用next的次数超过这个值就会报stopiteration
生成器就是一个可迭代对象 iterablre,可以用for循环遍历
for循环内部做了三件事:
1.调用对象的iter()方法,返回一个迭代器对象
2.启用一个while循环
i=next(list_iterator)
生成器两种创建方式:
1.()方式
2.yield关键字方式
def foo() (生成器创建方式2)
print('ok')
yield 1
print('ok2')
yield 2
g=foo()
next(g) 从头执行到yield 1,并返回1给next(g)
next(g) 从头执行到yield 2,并返回2给next(g)
for i in foo():
print i
输出结果 ok 1 OK2 2
for i in 可迭代对象,什么是可迭代对象,内部有iter方法的都是可迭代对象
b.send(None) == next(b) 第一次send前如果没有next,只能传一个send(None)
def bar():
print('ok')
count=yield 1
print(count)
yield 2
b=bar
next(b)
b.send('eeee') 给count赋值eeee,将2返回至b.send('eeee')
*****************************************迭代器****************************************
生成器都是迭代器,迭代器不一定是生成器
l=【1,2,3,4】,元组,字典
d=iter(l) 返回一个迭代器对象
next(d)=1
什么是迭代器?满足两个条件:(迭代器协议)
1.有iter方法
2.有next方法
1.调用可迭代对象的iter方法,返回一个迭代器对象
2.调用迭代器的next方法
3.处理stopiteration异常
isinstance 判断对象是否是正确的类型
isinstance (l,iterable)ture 可迭代对象
isinstance (l,iterator)FAlse 迭代器
***************************************time模块***********************************
impot time
time.time() 拿到时间戳*****
time.clock() 计算CPU执行的时间
time.sleep() *****
time.gmtime() 英国结构化时间,utc时间
time.localtime() 本地时间******
time.strftime((%Y--%m--%d %H:%M:%S),(time.localtime)) 字符串时间******
time.strptime('2019-10-9','%Y-%m-%d) 字符串时间转换成结构化时间 ,单取一个年,可能用到********
表示时间的方式:时间戳、结构化时间,字符串格式化时间
time.ctime(时间戳,默认为空),时间戳转化固定格式字符串时间
time.mktime(结构化时间),结构化时间转化时间戳
*************************datetime模块************************************
import datetime
datetime.datetime.now() 友好的字符串时间表示
datetime.date.time.
*******************************random模块*******************************
import random
random.random() 创建一个(0,1)的随机数
random.randint(1,8) 创建一个1,8的整数,包括8
random.choice('hello') 在序列里随机选一个数
random.sample(【['1,2,3',4,【1,2】】,2)随机选两个
random.randrange(1,10),1~9选一个数,不包括10
chr(65)=A ASCII码转换

浙公网安备 33010602011771号