訂閱
糾錯(cuò)
加入自媒體

python修煉day32!

2019-02-22 10:49
QYFabc
關(guān)注

積累:

把有用的方法封裝到文件中,注意積累

迭代器

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)最少

<上一頁(yè)  1  2  
聲明: 本文由入駐維科號(hào)的作者撰寫(xiě),觀點(diǎn)僅代表作者本人,不代表OFweek立場(chǎng)。如有侵權(quán)或其他問(wèn)題,請(qǐng)聯(lián)系舉報(bào)。

發(fā)表評(píng)論

0條評(píng)論,0人參與

請(qǐng)輸入評(píng)論內(nèi)容...

請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字

您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)

  • 看不清,點(diǎn)擊換一張  刷新

暫無(wú)評(píng)論

暫無(wú)評(píng)論

人工智能 獵頭職位 更多
掃碼關(guān)注公眾號(hào)
OFweek人工智能網(wǎng)
獲取更多精彩內(nèi)容
文章糾錯(cuò)
x
*文字標(biāo)題:
*糾錯(cuò)內(nèi)容:
聯(lián)系郵箱:
*驗(yàn) 證 碼:

粵公網(wǎng)安備 44030502002758號(hào)