Python的学习之旅———三元表达式 列表解析 序列化

三元表达式

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

 dump和load的对象都是文件句柄  dumps和loads的对象是文件内容



原文地址:https://www.cnblogs.com/surehunter/p/7651185.html