#1. #A:+ * 切片 作用于元组的时候会返回新元组 #B:元组的不可变性只适用于于元组本身顶层而非其内容,例如:元组内部列表时可以被修改的 tupleTem = () #tupleTem = () tupleTem = 0, 1 #tupleTem = (0, 1) tupleTem = (0) #tupleTem = 0 tupleTem = tupleTem + 1 #tupleTem = 1 tupleTem = (0, ) #tupleTem = (0,) #tupleTem = tupleTem + 1 #运行出错 tupleTem += (1, 2) #tupleTem = (0, 1, 2) #tupleTem += (3) #运行出错 v = (v for v in range(1, 3)) #v = <generator object <genexpr> at 0x0000000002D5F5E8> tupleTem = tuple(v) #tupleTem = (1, 2) tupleTem = 1, 2, 3, 4 #tupleTem = (1, 2, 3, 4) tupleTem = (1, (1, 's')) #tupleTem = (1, (1, 's')) v = tupleTem[1][1] #v = 's' tupleTem = ([1, 2], 2, 3,) #tupleTem = ([1, 2], 2, 3) #tupleTem[0] = [1] #运行出错 tupleTem[0].append('s') #tupleTem = ([1, 2, 's'], 2, 3) tupleTem = tuple((v * 4 for v in 'szn')) #tupleTem = ('ssss', 'zzzz', 'nnnn') tupleCopy = tupleTem[:] #tupleCopy = ('ssss', 'zzzz', 'nnnn') tupleTem += (1, 2) #tupleTem = ('ssss', 'zzzz', 'nnnn', 1, 2) tupleCopy = ('ssss', 'zzzz', 'nnnn') #2. #A:文件迭代器是最好的读取行工具 #B:write()返回写入字符数 buff = [] with open('1.txt', "rb") as pFile: for line in pFile: buff.append(line) #buff = [b'1 ', b'2 ', b'3'] pFile = open('2.txt', 'w') v = pFile.write('12 3') #v = 4 pFile.close() #3. #A:pickle模块,能让我们直接在文件中存储几乎任何python对象 import pickle value = [1, 2, (3, 4), '5', {6:7}] pFile = open("Test.pkl", "wb") pickle.dump(value, pFile) pFile.close() pFile = open("Test.pkl", "rb") value1 = pickle.load(pFile) #value1 = [1, 2, (3, 4), '5', {6: 7}] #4. try: 0 / 2 #执行至此 except ZeroDivisionError: print() else: print() #执行至此 finally: print() #执行至此 try: 2 / 0 #执行至此 except KeyError: print() except ZeroDivisionError: print() #执行至此 else: print() finally: print() #执行至此 #5. #A:赋值操作总是存储对象的引用,而不是这些对象的拷贝 #B:无条件的切片以及copy()只能做顶层复制,不能够复制嵌套的数据结构 value = [1, 2] v0 = [value, 's'] v1 = {'a' : value} v1['a'].append('s') #v1 = {'a': [1, 2, 's']} value = [1, 2, 's'] v0 = [[1, 2, 's'], 's'] v0 = [1, 2] v1 = [v0, 's'] v2 = v1.copy() v2[0].append('z') #v2 = [[1, 2, 'z'], 's'] v0 = [1, 2, 'z'] v0 = [1, 2] v1 = [v0, 's'] import copy v2 = copy.copy(v1) v2[0].append('z') #v2 = [[1, 2, 'z'], 's'] v0 = [1, 2, 'z'] v0 = [1, 2] v1 = [v0, 's'] import copy v2 = copy.deepcopy(v1) v2[0].append('z') #v2 = [[1, 2, 'z'], 's'] v0 = [1, 2] #6. #A:在python3中,不支持字典大小比较,字典通过排序之后的(键、值)列表进行比较 #B:在在python3中,混合数字比较是错误的,比如1 < 's' v0 = {'a':2,'b':1} v1 = {'b':1, 'a':2} #v = v0 < v1 #运行出错 v = v0 == v1 #v = True #v = 1 < 's' #运行出错 #v = 1 < [1] #运行出错 #7. #A:任何非空对象为真,非0数字为真,其余为假,None也为False #8. #A:isinstance(object, classinfo) object是否是classinfo类型 v = isinstance('s', str) #v = True v = isinstance(1, list) #v = False v = isinstance([], list) #v = True v = isinstance((1, 's'), tuple) #v = True #9. v = [1, 2] v1 = v * 4 #v1 = [1, 2, 1, 2, 1, 2, 1, 2] v2 = [v] * 4 #v2 = [[1, 2], [1, 2], [1, 2], [1, 2]] v[0] = 0 #v1 = [1, 2, 1, 2, 1, 2, 1, 2] v2 = [[0, 2], [0, 2], [0, 2], [0, 2]] #10. v0 = [1, 2] v1 = v0 v0.append(3) #v0 = [1, 2, 3] v1 = [1, 2, 3] v = [1, 2] v.append(v) #v = [1, 2, [...]] value = v[2][2][2][2][2][2][2][2][2][2] #value = [1, 2, [...]] print(v) #输出[1, 2, [...]]