可爱的函数eval
#这个函数可以识别字符串中的对象,比如list,dict
#比如文件中保存了好多个列表,但是读出来之后都会变成字符串'[3,4,4]',用不了,就可以用eval
a='[1,2,3]' # 字符串
b=eval(a) #b是列表
用pickle直接保存python对象,好像pickle还有持久化的作用
import pickle
F = open('file.txt','w')
a = {'a':3}
#可以将任意对象保存到文件中
pickle.dump(a,F)
F.close()
f=open('file.txt')
#用pickle将保存的对象进行重建,得到的c是字典
c=pickle.load(f)
字符串打包成二进制数据文件保存
import struct
F = open('file.txt','w')
#'>i4sh'是C数据结构和python数据结构转换时的格式对照表
# >----编码方式 big-endian
# i ----> int ---> integer ---> 7
# 4s ----> char ---> string ---> 'spam'
# h ---> unsigned short ---> integer ---> 8
bytes = struct.pack('>i4sh',7,'spam',8)
F.write(bytes)
F.close()
#读取文件的时候用struct解压
F = open('file.txt')
data = F.read()
values = struct.unpack('>i4sh',data)
#values=(7,'spam',8)
比较相等 is 和 ==
# is 比较的是:是否指向同一个对象
# == 比较的是:值是否相等
L1 = [1,2,3]
L2 = [1,2,3]
L1 == L2
Out[47]: True
L1 is L2
Out[48]: False
#python内部认为暂时存储并重复使用短字符串是最佳的,所以内存中只有一个‘spam’字符串给a和b共享
a = 'abc'
b = 'abc'
a == b
Out[50]: True
a is b
Out[51]: True
#python中字符串是不可改变的,所以会为每个字符串分配内存。
a = 'abc d e f'
b = 'abc d e f'
a==b
Out[53]: True
a is b
Out[54]: False
重复和引用
>>>L1
Out[55]: [1, 2, 3]
>>>a=L1*4
>>>b=[L1]*4
>>>a
Out[58]: [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
>>>b
Out[59]: [[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]
>>>L1[1]='d'
>>>a
Out[61]: [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
>>>b
Out[62]: [[1, 'd', 3], [1, 'd', 3], [1, 'd', 3], [1, 'd', 3]]