1. 程式人生 > >集合、深淺拷貝、文件操作(讀、寫、追加)函數初識(參數)

集合、深淺拷貝、文件操作(讀、寫、追加)函數初識(參數)

table 不一致 pan see 並集 inter 組成 數值 多個

小數據池 #int ==比較數值 is 比較內存地址 id 測試內存地址 #str 不能含有特俗字符 單個元素*數字,不能超過21 i1 = ‘a’*20 i = ‘a’*20 id一樣 i1 = ‘a’*21 i = ‘a’*21 id不一樣 編碼 ascii 英文的數字,字母,特殊字符 字節 8位表示一個字節 字符 內容的最小組成單位 abc a一個字符 中國 中 一個字符 unicode :萬國碼 期初 兩個字節,表示一個字符2**16不夠用 升級 四個字節,表示一個字符2**32夠了
utf-8 最少用8位,表示一個字符 a 用8位表示 歐洲 用16位表示 亞洲 用24位表示 3字節 gbk 國標 包含英文和中文 中文用個字節表示 1.不同編碼之間的二進制不能互相識別 2.對於文件的存儲,及傳輸不能是unicode編碼 python3x int bool bytes:內部編碼方式(非unicode,可能是utf-8,國標,根本2312.。。。) str:內部編碼方式為unicode。不能用戶發送及存儲 list dict tuple str和bytes的區別 字母 str:表現形式:alex
內部編碼:unicode bytes:表現形式:s2 = b‘alex‘ 內部編碼:非unicode 中文 str:表現形式:’中國‘ 內部編碼:unicode bytes:表現形式:s2 = b‘\xe4\xb8\xad\xe5‘ 內部編碼:非unicode 編碼 所有編碼到uniconde都是decode 反之都是encode 集合 1.集合 要求它裏面的數據元素,可哈希的,元素不重復,無序 本身是不可哈希的 set1 = {} 1.關系測試 2.去重 l1 = [1,1,2,2,3,4,5] print(list(set(s1)
) set1 = {‘alex‘,‘wusir‘,‘egon‘,} set1.add(‘文州‘) set.update(‘abc‘) PS:叠代增加 刪: set1.pop() 隨機刪除 set.remove(‘alex‘) 按照元素刪除 set1.clear 清空集合 del set1 刪除整個集合 查: for i in set1: print(1) 關系測試: set1 = {1234} set2 = {2345} 交集 print(set & set2 ) print(set.intersection(set2)) 並集 print(set1 | set2) print(set1.union(set2)) 差集 (求set裏獨有的元素) print(set1 - set2) print(set1 difference set2) 反交集 (不是交集,為反交集) print(set1 ^ set2) print(set1.symmetric_difference(set2)) 父子集 (包含為超級,小為子集) set1 = {1,2,3} set2 = {1,2,3,4,5,6} print(set1 > set2) True print(set1.isubset(set2)) 凍集 set1 = {1,2,3} print(frozenset(set1)) 深淺拷貝 淺copy 第一層,各自獨立。從第二層開始,公用一個內存地址 s1 = [1,2,3] s2 = s1.copy[] s1.append(666) print(s1,s2) s1 = [1,2,3[11,22]] s2 = s1.copy[] s1[-1].append(666) print(s1,s2) 深copy 深copy無論多少次,都是互相獨立的。互不影響 import copy s1 = [1,2,3[11,22]] s2 = s1.deepcopy[s1] s1.append(666) print(s1,s2) 文件操作 f1 = open(‘d:\xx.txt‘,encoding=‘utf-8‘,mode=‘r‘) print(f1.read()) f1 文件句柄 open()調用的內置函數,內置函數調用的系統內部的open 一切對文件進行的操作都是基於文件句柄f1 執行流程:打開文件-->產生文件句柄-->對文件句柄進行操作-->關閉文件句柄 報錯原因: 編碼問題 File "D:/pycharm/day3/a.py", line 5, in <module> print(f1.read()) File "D:\python\lib\codecs.py", line 322, in decode (result, consumed) = self._buffer_decode(data, self.errors, final) UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xc4 in position 39: invalid continuation byte 編碼不一致 路徑錯誤 SyntaxError: (unicode error) ‘unicodeescape‘ codec can‘t decode bytes in position 2-3: truncated \UXXXXXXXX escape 解決方法 在 路徑最前面加個r 讀: r 1、read()全讀出來 2、read(n)讀一部分。n為讀取指定多少字符 3、readline()按行讀取 4、readlines()讀取多行,放在列表裏 5、for循環讀取 for x in f1: print(x) f1.close() rb f1 = open(‘1.jpg‘,mode=‘rb‘) print(f1.read) f1.close rb的raad(n)n為字節 r+ r+讀寫模式 r+b (涉及到b的,是bytes類型。都是非文字類型的文件,如電影,音樂) 寫: f1 = open(‘log2‘,encoding=‘utf-8‘,mode=‘w‘) w 沒有文件,創建文件也要寫入。 有源文件,先清空內容,後寫入內容 wb w+ 寫讀模式,替換的是字節 f1.seek(0) #調整光標到最前面 (0,2) #調整到末尾 w+b 追加: a 沒有文件,創建文件寫入 有源文件,後面追加 f1 = open(‘賬號密碼‘,encoding=‘utf-8‘,‘mode=‘a‘) f1.write(‘太白‘) f1.close ab a+ a+b 其他操作方法 readable 是否可讀 writable 是否可寫 tell 告訴光標具體在哪 seek 調整光標的位置 (0,2)調整到末尾 truncate 只能在a或者在a+模式下使用的truncate 按照字節對源文件截取 with open(‘d:\xx.txt‘,encodint=‘utf-8‘,mode=‘r‘)as f1,: print(f1.read) 在一定的時間內,自動關閉 能用一條語句,操作多個open 文件的改 1.以讀模式打開源文件 2.以寫的模式打開一個新文件 3.將源文件內容讀出,按照要求修改,將修改後的內容,寫入新文件 4.刪除源文件 5.將新文件重命名源文件 函數 初識函數 def 函數名(): 函數體 函數執行:函數名() 函數以功能為導向 函數名() return 1.終止函數 2.給函數的執行者返回值 return 或者 return none 多個值,返回元組 3. 函數的傳參 1.形參角度 1.位置參數 與實參的位置參數一一對應 2.默認參數 默認參數要在位置參數後面,括號裏面加入參數為默認參數 3.動態參數 傳入的參數不固定,用動態參數 *args 接受所有的位置參數,放在元組中 **kwargs 接受所有的關鍵字參數,放在字典裏 #函數定義的時候,*代表聚合 #函數執行的時候,*代表打散,放到一起 字典用兩顆星** 形參先後順序:位置參數-->*args-->默認參數-->**kwargs 2。實參角度 1.位置參數 按順序一一對應 2.關鍵字傳參 參數一一對應 3.混合傳參(位置參數,關鍵字參數) 關鍵字參數必須在位置參數後面 條件簡單,切結果簡單。可以用三元運算

集合、深淺拷貝、文件操作(讀、寫、追加)函數初識(參數)