列表生成式:
a = [x*2 for x in range(10)] #这是最简单的列表生成式,range换成其它的序列也OK a = [f(x) for x in range(10)] #将里将前面对变量的操作改为函数也是可以的,这样灵活性就更大了
变量赋值方式:
a,b = 10,20 t = ('123',8) #不一定要是元组,只要是序列就行 a,b = t #变量数量必须要和t中元素一样多,不然报错
生成器可以通过两种方式创建:
1、小括号
2、定义函数,将return换成yield
s = (x*2 for x in range(1000)) #用小括号括起来就是创建一个生成器对象,中括号就是一个列表生成式 print(s) #<generator object <genexpr> at 0x00000000011A0FC0>
def foo(): print('ok') yield 1 #yield相关于retrun,只不过带有个这关键字,这就不是一个函数了,而是一个生成器 print('ok2') yield 2 g = foo() #必须要进行赋值,不然如果next中是foo()的话,执行达不到想要的效果,why??? next(g) next(g)
生成器创建之后通过两种方式执行:
1、next
2、send() 可以传值
next(s) #等价于s.__next__() 在py2中是s.next()
def foo(): print('ok') count=yield 1 #此句先执行yield,然后停止,下一次才执行赋值 print(count) print('ok2') yield 2 g = foo() g.send(None) #如果没有进入生成器,第一次不能赋值 g.send(1) #向里面变量传值
重新审视for循环:
for i in s: #s只要是可迭代对象就可以,可迭代对象有:列表,字典,字符串,生成器等 print(i)
for 循环内部三件事:
1、调用可迭代对象的iter方法返回一个迭代器对象
2、不断调用迭代器对象的Next方法
3、处理stopiteration
iterable和iterator区别
iterable是可迭代对象,如:列表,字典、字符串等都是可迭代对像,但他们不是iterator
interator是迭代器,迭代器可以使用next方法
isinstance(对象,类型) #用来判断对象是否属于某一类型
from collections import Iterator,Iterable l = [1,2,3,5] d = iter(l) #将对象转换成迭代器 print(isinstance(l,list))
模块:
模块通过import来引用
时间模块:
print(help(time))
Greenwich Mean Time 格林威治平均时间/格林威治标准时间
UTC:Coordinated Universal Time协调世界时
#输出结果为结构时间格式: print(time.gmtime()) #time.struct_time(tm_year=2018, tm_mon=2, tm_mday=8, tm_hour=7, tm_min=58, tm_sec=35, tm_wday=3, tm_yday=39, tm_isdst=0) print(time.localtime()) #time.struct_time(tm_year=2018, tm_mon=2, tm_mday=8, tm_hour=15, tm_min=58, tm_sec=35, tm_wday=3, tm_yday=39, tm_isdst=0) #输出结果为时间戳: print(time.time()) #1518077218.8718002 #将结构时间转换成时间戳 print(time.mktime(time.localtime())) #1518078086.0 #将时间戳转换成结构时间(其实就是在localtime和gmtime后面加了个时间戳作为参数): print(time.localtime(1518078086)) #time.struct_time(tm_year=2018, tm_mon=2, tm_mday=8, tm_hour=16, tm_min=21, tm_sec=26, tm_wday=3, tm_yday=39, tm_isdst=0) print(time.gmtime(1518078086)) #time.struct_time(tm_year=2018, tm_mon=2, tm_mday=8, tm_hour=8, tm_min=21, tm_sec=26, tm_wday=3, tm_yday=39, tm_isdst=0) #将结构时间格式输出为指定格式的日期字符串: print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())) #2018-02-08 16:12:36 #将日期字符串转换为结构日期格式: print(time.strptime('2018-02-06 19:15:51','%Y-%m-%d %H:%M:%S')) #time.struct_time(tm_year=2018, tm_mon=2, tm_mday=6, tm_hour=19, tm_min=15, tm_sec=51, tm_wday=1, tm_yday=37, tm_isdst=-1)
#提取结构时间中相应的值:
a=time.strptime('2018-02-06 19:15:51','%Y-%m-%d %H:%M:%S') #只要是结构时间格式就行,
print(a.tm_year) #2018,提取结构时间中的年份值
print(a.tm_mday) #6,表示为月份中的第几天
print(a.tm_wday) #1,表示为一周中的第几天,周一为第0天
print(a.tm_yday) #37,表示为一年中的第几天
#将时间转成固定格式:
print(time.asctime(time.localtime())) #Mon Jun 25 21:07:30 2018
print(time.ctime(time.time()) #Mon Jun 25 21:07:30 2018
#时间加减 import datetime print(datetime.datetime.now()) #2018-02-08 17:10:23.985800 print(datetime.datetime.now()+datetime.timedelta(-3)) #2018-02-05 17:10:23.985800 print(datetime.datetime.now()+datetime.timedelta(hours=8)) #2018-02-09 01:10:23.985800 #时间替换 current_time = datetime.datetime.now() print(current_time.replace(minute=2,day=15)) #2018-02-15 17:02:23.444800
随机数模块:
import random print(random.random()) #随机产生[0-1)之间的浮点数 print(random.uniform(1,4)) #随机产生一个[1,4]之间的浮点数 #这两个都可以返回浮点数,只是一个可以指定范围,一个不可以 print(random.randint(1,8)) #返回[1,8]之间的一个整数 print(random.randrange(1,3)) #从1-2中随机选择一个整数,不包括3,可以添加步长,和range用法差不多 #这两个都可以返回整数,只是一个可以加步长,一个不可以加 #上面这4个方法的参数只能是数字,不能是字符串或字母 print(random.choice('hello')) #从序列中随机选择一个元素,只能一个,想选多个用sample print(random.choice(['hello',4,[123]])) print(random.sample(['123',4,[1,2]],2)) #从中随机选择几个,选择几个取决于最后面那个参数 #这两个都可以返回序列中的某个元素,只是一个可以选多个,一个只能选一个 item= [1,'a','e',8,'y'] random.shuffle(item) #将序列重新洗牌 print(item) #[1, 'y', 8, 'a', 'e']
string模块
import string print(string.digits) #0123456789 print(string.ascii_letters) #abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ print(string.ascii_lowercase) #abcdefghijklmnopqrstuvwxyz print(string.ascii_uppercase) #ABCDEFGHIJKLMNOPQRSTUVWXYZ print(string.punctuation) #!"#$%&'()*+,-./:;<=>?@[]^_`{|}~