1. 程式人生 > >小作業 10

小作業 10

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()