python修煉day32!
積累:
把有用的方法封裝到文件中,注意積累
迭代器
iteration # 迭代器
iterable # 可迭代的、
保存的是生成數(shù)據(jù)的代碼,不是數(shù)據(jù)
迭代器:
可迭代對象:有iter() 方法就是可迭代對象 def __iter__ (self): 迭代器: 同時有 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, 那么這個函數(shù)就不在是函數(shù),而是一個生成器的模板
調(diào)用一個函數(shù)時,發(fā)現(xiàn)這個函數(shù)中有yield 語句,那么此時,不是調(diào)用函數(shù),而是創(chuàng)建一個生成器對象
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é)程總結(jié)
多任務(wù)的概念:同一時刻執(zhí)行多個任務(wù)
線程:"""創(chuàng)建線程的兩種方式"""import threadingdef sing(num): passt = threading.Thread(targets=sing, args=(1,))t.start()"""繼承的方式"""class MyThread(threading.Thread): def run(delf): passt = MyThread()t.start()
特點
線程運行在進程中,線程依賴于進程線程比進程的系統(tǒng)開銷小 共享全局資源(變量)協(xié)程運行在線程中,把線程空閑時間利用起來,實現(xiàn)多任務(wù)
資源競爭
互斥鎖:解決線程中資源競爭的問題 lock = threading.Lock() lock.a(chǎn)cquire() # 上鎖 代碼。。。 lock.release() # 解鎖死鎖:兩個線程都在等待對方釋放鎖進程"""創(chuàng)建進程的方式"""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()
特點
定義:正在運行的程序,在任務(wù)列表中可以查看進程運行起來后可以調(diào)度系統(tǒng)資源占用的系統(tǒng)的開銷最大寫時拷貝:即修改的時候去把代碼賦值一份進程不共享全局變量進程結(jié)束了,里面所有的線程、協(xié)程也都結(jié)束了
進程間通訊
q = multiprocessing.Queue() # 創(chuàng)建隊列q.put("數(shù)據(jù)") # 放數(shù)據(jù)q.get() # 取數(shù)據(jù)
進程池
作用:它是一個緩存池,避免了重復(fù)的創(chuàng)建進程,銷毀進程的一些不必要的系統(tǒng)開銷 從而提高了程序運行的效率pool = multiprocessing.Pool(3) # 創(chuàng)建進程池,最大進程數(shù)為3pool.a(chǎn)pply_async(函數(shù)名,()) # 開啟進程pool.close() # 關(guān)閉進程池pool.join() # 等待所有的進程結(jié)束進程池中創(chuàng)建隊列q = multiprocessing.Manager.Queue()協(xié)程
迭代器
可迭代對象:有iter() 方法就是可迭代對象 def __iter__ (self): 迭代器: 同時有 iter() 和 next() 就是迭代器 def __iter__(self): def __next__(self):
生成器
定義:是一個特殊的迭代器 存儲的是生成數(shù)據(jù)的方式,而不存儲數(shù)據(jù)如何寫生成器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)前運行狀態(tài)(斷點),然后暫停執(zhí)行,即將生成器(函數(shù))掛起將yield關(guān)鍵字后面表達式作為返回值返回,起到了return的作用,可以使用next()函數(shù)讓生成器從斷點出繼續(xù)執(zhí)行
協(xié)程
yield
運行在一個線程中,利用線程的空閑時間完成多任務(wù)系統(tǒng)開銷最少

請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
推薦專題
-
9 每日AI全球觀察
- 1 特斯拉工人被故障機器人打成重傷,索賠3.6億
- 2 【行業(yè)深度研究】退居幕后四年后,張一鳴終于把算法公司變成AI公司?
- 3 AI 時代,阿里云想當(dāng)“安卓” ,那誰是“蘋果”?
- 4 拐點已至!匯川領(lǐng)跑工控、埃斯頓份額第一、新時達海爾賦能扭虧為盈
- 5 硬剛英偉達!華為發(fā)布全球最強算力超節(jié)點和集群
- 6 隱退4年后,張一鳴久違現(xiàn)身!互聯(lián)網(wǎng)大佬正集體殺回
- 7 00后華裔女生靠兩部AI電影狂賺7.8億人民幣,AI正式進軍好萊塢
- 8 谷歌“香蕉”爆火啟示:國產(chǎn)垂類AI的危機還是轉(zhuǎn)機?
- 9 機器人9月大事件|3家國產(chǎn)機器人沖刺IPO,行業(yè)交付與融資再創(chuàng)新高!
- 10 美光:AI Capex瘋投不止,終于要拉起存儲超級周期了?
- 生產(chǎn)部總監(jiān) 廣東省/廣州市
- 資深管理人員 廣東省/江門市
- Regional Sales Manager 廣東省/深圳市
- 銷售總監(jiān) 廣東省/深圳市
- 結(jié)構(gòu)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 自動化高級工程師 廣東省/深圳市
- 技術(shù)專家 廣東省/江門市
- 激光器高級銷售經(jīng)理 上海市/虹口區(qū)
- 封裝工程師 北京市/海淀區(qū)