三元表达式
name=input('姓名>>: ')
res='SB' if name == 'alex' else 'NB'
print(res)
列表解析
1 egg_list=[] 2 for i in range(10): 3 if i >= 3: 4 res='egg%s' %i 5 egg_list.append(res) 6 7 print(egg_list) 8 9 10 l=['egg%s' %i for i in range(10) if i >= 3] 11 print(l) 12 13 g=('egg%s' %i for i in range(10) if i >= 3) 14 print(next(g))
l是鸡蛋筐
g是一个鸡蛋 next一次就产生一个
list(g) #因g可迭代,因而可以转成列表
['鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4',]
1 l=['egg%s'%i for i in range(1,10) if i>3] 2 print(l) 3 l=('egg%s'%i for i in range(1,10) if i>3) 4 print(next(l)) 5 print(list(l)) 6 7 8 ['egg4', 'egg5', 'egg6', 'egg7', 'egg8', 'egg9'] 9 egg4 10 ['egg5', 'egg6', 'egg7', 'egg8', 'egg9']
对于生成器来讲,next一次里面的元素就少一个.
我们使用列表推导式时大多时候是为了减少代码行数, 很少是为了提高性能的。 还有一个目的就是为了使得代码更加简单而又实用,
所以如果有更简洁的写法的话, 那就果断抛弃列表推导式吧!
序列化
什么是序列化?
我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等.
为什么要序列化?
1:持久保存状态
2:跨平台数据交互
序列化 dumps() 和反序列化loads().
序列化的表示是双引号"" 任何数据都要用双引号引用起来.
当前序列化只能在文件的一行.
对于dump和load可以直接加 对象和文件句柄
user={'name':'egon','pwd':'123','age':18}
json.dump(user,open('db1.json','w',encoding='utf-8'))
user={'name':'egon','pwd':'123','age':18}
json.load(open('db1.json','w',encoding='utf-8'))
需要注意的是:
import json dct="{'1':111}"#json 不认单引号 dct=str({"1":111})#报错,因为生成的数据还是单引号:{'one': 1} dct='{"1":"111"}' print(json.loads(dct)) 无论数据是怎样创建的,只要满足json格式,就可以json.loads出来,不一定非要dumps的数据才能loads