小作業 10
阿新 • • 發佈:2018-12-23
1.什麼是面向物件的mro
獲取類的繼承順序(多繼承)(物件.__mro__)
2.json序列化時,預設遇到中文會轉換成unicode,如果想要保留中文怎麼辦?
在序列化時,中文漢字總是被轉換為unicode碼,在dumps函式中新增引數ensure_ascii=False即可解決。
import json d = dict(name='三橋',age=30) jd = json.dumps(d,ensure_ascii=False) print(jd)
3.簡述 yield關鍵字。
隨著生成器呼叫next方法,得到yield的值
1、返回的是一個迭代器,用迭代器的next函式,會返回迭代器的下一個值;
2、下次執行會直接跳到yield,就像在這個地方設定了一個斷點;
3、如果有多個yield,會先迭代完一個,順序迭代下一個,就是遞迴一樣。
4.簡述 OSI 七層協議。
應用層、表示層、會話層、傳輸層、網路層、資料鏈路層、物理層
7.GIL鎖是什麼鬼
GIL本質就是一把互斥鎖,既然是互斥鎖,所有互斥鎖的本質都一樣,都是將併發執行變成序列,以此來控制同一時間內共享資料只能被一個任務所修改,進而保證資料安全。
GIL保護的是直譯器級的資料,保護使用者自己的資料則需要自己加鎖處理
lock = Lock() # 保護互斥量
lock.acquire() # 加鎖 lock.release() # 解鎖
9.如何在一個function裡面設定一個全域性的變數?
global
程式設計練習
1.建立一個檔案,檔案的第一行寫入0,再建立20個任務執行緒,他們同時開啟檔案並將檔案第一行讀出來,加1寫回去(將檔案原有值覆蓋掉)請保證20個任務執行緒完成後,檔案中的第一行一定是20!
from threading import Thread with open('text',mode='w+') as f: f.write('0') # 建立一個檔案,檔案的第一行寫入0 def add(): with open('text',mode='r') as f1: l= int(f1.read()) # 將檔案第一行讀出來 l += 1 with open('text',mode='w') as f3: f3.write(str(l)) # 每次執行都加一併寫入 # 建立20個任務執行緒 if __name__ == '__main__': for i in range(20): thr = Thread(target=add) thr.start() thr.join()