python修煉day32!
積累:
把有用的方法封裝到文件中,注意積累
迭代器
iteration # 迭代器
iterable # 可迭代的、
保存的是生成數(shù)據(jù)的代碼,不是數(shù)據(jù)
迭代器:
可迭代對(duì)象:有iter() 方法就是可迭代對(duì)象 def __iter__ (self): 迭代器: 同時(shí)有 iter() 和 next() 就是迭代器 def __iter__(self): def __next__(self):斐波那契數(shù)列迭代器代碼
class Fibonacci(object):
def __init__(self, all_num):
self.a(chǎn)ll_num =all_num
self.a(chǎn) = 0
self.b = 1
self.num = 0
def __iter__(self):
return self
def __next__(self):
if self.num < self.a(chǎn)ll_num:
result = self.a(chǎn)
self.a(chǎn), self.b = self.b, self.a(chǎn) + self.b
self.num += 1
return result
else:
raise StopIteration
f = Fibonacci(100)
for i in f:
print(i)
生成器
生成器是一種特殊的迭代器
列表推導(dǎo)式
保存的是生成的方式,不是數(shù)據(jù)
調(diào)用方式:next(obj) obj.send
函數(shù)中有 yield, 那么這個(gè)函數(shù)就不在是函數(shù),而是一個(gè)生成器的模板
調(diào)用一個(gè)函數(shù)時(shí),發(fā)現(xiàn)這個(gè)函數(shù)中有yield 語(yǔ)句,那么此時(shí),不是調(diào)用函數(shù),而是創(chuàng)建一個(gè)生成器對(duì)象
def fibonacci(num): n, a, b = 0, 0, 1 while n < num: # print(a) yield a a, b = b, a + b n += 1 return "---ok---"f = fibonacci(11)print(next(f))while True: try: r = next(f) print(r) except Exception as ret: print(ret.value) break# for i in f:# print(i)
線(xiàn)程、進(jìn)程、協(xié)程總結(jié)
多任務(wù)的概念:同一時(shí)刻執(zhí)行多個(gè)任務(wù)
線(xiàn)程:"""創(chuàng)建線(xiàn)程的兩種方式"""import threadingdef sing(num): passt = threading.Thread(targets=sing, args=(1,))t.start()"""繼承的方式"""class MyThread(threading.Thread): def run(delf): passt = MyThread()t.start()
特點(diǎn)
線(xiàn)程運(yùn)行在進(jìn)程中,線(xiàn)程依賴(lài)于進(jìn)程線(xiàn)程比進(jìn)程的系統(tǒng)開(kāi)銷(xiāo)小 共享全局資源(變量)協(xié)程運(yùn)行在線(xiàn)程中,把線(xiàn)程空閑時(shí)間利用起來(lái),實(shí)現(xiàn)多任務(wù)
資源競(jìng)爭(zhēng)
互斥鎖:解決線(xiàn)程中資源競(jìng)爭(zhēng)的問(wèn)題 lock = threading.Lock() lock.a(chǎn)cquire() # 上鎖 代碼。。。 lock.release() # 解鎖死鎖:兩個(gè)線(xiàn)程都在等待對(duì)方釋放鎖進(jìn)程"""創(chuàng)建進(jìn)程的方式"""import multiprocessingdef sing(a, b): passp = multiprocessing.Process(target=sing, args=(1, 2), kwargs=(name="xiaohei"))"""繼承的方式"""class MyProcess(multiprocessing.Process): def run(self): passp = MyProcess()p.start()
特點(diǎn)
定義:正在運(yùn)行的程序,在任務(wù)列表中可以查看進(jìn)程運(yùn)行起來(lái)后可以調(diào)度系統(tǒng)資源占用的系統(tǒng)的開(kāi)銷(xiāo)最大寫(xiě)時(shí)拷貝:即修改的時(shí)候去把代碼賦值一份進(jìn)程不共享全局變量進(jìn)程結(jié)束了,里面所有的線(xiàn)程、協(xié)程也都結(jié)束了
進(jìn)程間通訊
q = multiprocessing.Queue() # 創(chuàng)建隊(duì)列q.put("數(shù)據(jù)") # 放數(shù)據(jù)q.get() # 取數(shù)據(jù)
進(jìn)程池
作用:它是一個(gè)緩存池,避免了重復(fù)的創(chuàng)建進(jìn)程,銷(xiāo)毀進(jìn)程的一些不必要的系統(tǒng)開(kāi)銷(xiāo) 從而提高了程序運(yùn)行的效率pool = multiprocessing.Pool(3) # 創(chuàng)建進(jìn)程池,最大進(jìn)程數(shù)為3pool.a(chǎn)pply_async(函數(shù)名,()) # 開(kāi)啟進(jìn)程pool.close() # 關(guān)閉進(jìn)程池pool.join() # 等待所有的進(jìn)程結(jié)束進(jìn)程池中創(chuàng)建隊(duì)列q = multiprocessing.Manager.Queue()協(xié)程
迭代器
可迭代對(duì)象:有iter() 方法就是可迭代對(duì)象 def __iter__ (self): 迭代器: 同時(shí)有 iter() 和 next() 就是迭代器 def __iter__(self): def __next__(self):
生成器
定義:是一個(gè)特殊的迭代器 存儲(chǔ)的是生成數(shù)據(jù)的方式,而不存儲(chǔ)數(shù)據(jù)如何寫(xiě)生成器def a(): result = yield a return ""try: obj = a() next(obj) obj.send(“傳遞數(shù)據(jù)”)except Exception as e: e.valueyield 關(guān)鍵字:保存當(dāng)前運(yùn)行狀態(tài)(斷點(diǎn)),然后暫停執(zhí)行,即將生成器(函數(shù))掛起將yield關(guān)鍵字后面表達(dá)式作為返回值返回,起到了return的作用,可以使用next()函數(shù)讓生成器從斷點(diǎn)出繼續(xù)執(zhí)行
協(xié)程
yield
運(yùn)行在一個(gè)線(xiàn)程中,利用線(xiàn)程的空閑時(shí)間完成多任務(wù)系統(tǒng)開(kāi)銷(xiāo)最少
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
即日-10.29立即報(bào)名>> 2024德州儀器嵌入式技術(shù)創(chuàng)新發(fā)展研討會(huì)
-
10月31日立即下載>> 【限時(shí)免費(fèi)下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
-
即日-11.13立即報(bào)名>>> 【在線(xiàn)會(huì)議】多物理場(chǎng)仿真助跑新能源汽車(chē)
-
11月14日立即報(bào)名>> 2024工程師系列—工業(yè)電子技術(shù)在線(xiàn)會(huì)議
-
12月19日立即報(bào)名>> 【線(xiàn)下會(huì)議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
即日-12.26火熱報(bào)名中>> OFweek2024中國(guó)智造CIO在線(xiàn)峰會(huì)
推薦專(zhuān)題
- 1 Intel宣布40年來(lái)最重大轉(zhuǎn)型:年底前裁員15000人、拋掉2/3房產(chǎn)
- 2 因美封殺TikTok,字節(jié)股價(jià)骨折!估值僅Meta1/5
- 3 宏山激光重磅發(fā)布行業(yè)解決方案,助力智能制造產(chǎn)業(yè)新飛躍
- 4 國(guó)產(chǎn)AI芯片公司破產(chǎn)!白菜價(jià)拍賣(mài)
- 5 具身智能火了,但規(guī)模落地還需時(shí)間
- 6 國(guó)產(chǎn)英偉達(dá)們,抓緊沖刺A股
- 7 三次錯(cuò)失風(fēng)口!OpenAI前員工殺回AI編程賽道,老東家捧金相助
- 8 英偉達(dá)的麻煩在后頭?
- 9 將“網(wǎng)紅”變成“商品”,AI“爆改”實(shí)力拉滿(mǎn)
- 10 智慧貨架管理引領(lǐng)零售新風(fēng)尚
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷(xiāo)售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷(xiāo)售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專(zhuān)家 廣東省/江門(mén)市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市