可愛的函數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]]