可以直接把函數(shù)放到if后面當(dāng)作條件,如果為空的話判斷結(jié)果是false,例如:

創(chuàng)新互聯(lián)公司是專業(yè)的黃梅網(wǎng)站建設(shè)公司,黃梅接單;提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行黃梅網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
def?test():
return?None
if?test():
print?True
else:
print?False
假設(shè)?deque 變量是 d, 可以直接用 if else 判斷.
if?d:
#?隊(duì)列不為空
else:
#?隊(duì)列為空
因?yàn)?python 的 if 會(huì)把表達(dá)式轉(zhuǎn)化為 bool 值,隊(duì)列不為 None 并且長(zhǎng)度不是零的時(shí)候表達(dá)式的值為 True。否則為 False. 同理的還有其他 List, Dict 類型等
到這里,我們要聊一下線程通信的內(nèi)容;
首先,我們拋開語(yǔ)言不談,先看看比較基礎(chǔ)的東西,線程間通信的方式;其實(shí)也就是哪幾種(我這里說(shuō)的,是我的所謂的知道的。。。)事件,消息隊(duì)列,信號(hào)量,條件變量(鎖算不算?我只是認(rèn)為是同步的一種);所以我們也就是要把這些掌握了,因?yàn)楦饔懈鞯暮锰幝铮?/p>
條件變量我放到了上面的線程同步里面講了,我總感覺這算是同步的一種,沒有很多具體信息的溝通;同時(shí)吧,我認(rèn)為條件變量比較重要,因?yàn)檫@種可以應(yīng)用于線程池的操作上;所以比較重要;這里,拋開條件變量不談,我們看看其他的東西;
1、消息隊(duì)列:
queue 模塊下提供了幾個(gè)阻塞隊(duì)列,這些隊(duì)列主要用于實(shí)現(xiàn)線程通信。在 queue 模塊下主要提供了三個(gè)類,分別代表三種隊(duì)列,它們的主要區(qū)別就在于進(jìn)隊(duì)列、出隊(duì)列的不同。
關(guān)于這三個(gè)隊(duì)列類的簡(jiǎn)單介紹如下:
queue.Queue(maxsize=0):代表 FIFO(先進(jìn)先出)的常規(guī)隊(duì)列,maxsize 可以限制隊(duì)列的大小。如果隊(duì)列的大小達(dá)到隊(duì)列的上限,就會(huì)加鎖,再次加入元素時(shí)就會(huì)被阻塞,直到隊(duì)列中的元素被消費(fèi)。如果將 maxsize 設(shè)置為 0 或負(fù)數(shù),則該隊(duì)列的大小就是無(wú)限制的。
queue.LifoQueue(maxsize=0):代表 LIFO(后進(jìn)先出)的隊(duì)列,與 Queue 的區(qū)別就是出隊(duì)列的順序不同。
PriorityQueue(maxsize=0):代表優(yōu)先級(jí)隊(duì)列,優(yōu)先級(jí)最小的元素先出隊(duì)列。
這三個(gè)隊(duì)列類的屬性和方法基本相同, 它們都提供了如下屬性和方法:
Queue.qsize():返回隊(duì)列的實(shí)際大小,也就是該隊(duì)列中包含幾個(gè)元素。
Queue.empty():判斷隊(duì)列是否為空。
Queue.full():判斷隊(duì)列是否已滿。
Queue.put(item, block=True, timeout=None):向隊(duì)列中放入元素。如果隊(duì)列己滿,且 block 參數(shù)為 True(阻塞),當(dāng)前線程被阻塞,timeout 指定阻塞時(shí)間,如果將 timeout 設(shè)置為 None,則代表一直阻塞,直到該隊(duì)列的元素被消費(fèi);如果隊(duì)列己滿,且 block 參數(shù)為 False(不阻塞),則直接引發(fā) queue.FULL 異常。
Queue.put_nowait(item):向隊(duì)列中放入元素,不阻塞。相當(dāng)于在上一個(gè)方法中將 block 參數(shù)設(shè)置為 False。
Queue.get(item, block=True, timeout=None):從隊(duì)列中取出元素(消費(fèi)元素)。如果隊(duì)列已滿,且 block 參數(shù)為 True(阻塞),當(dāng)前線程被阻塞,timeout 指定阻塞時(shí)間,如果將 timeout 設(shè)置為 None,則代表一直阻塞,直到有元素被放入隊(duì)列中; 如果隊(duì)列己空,且 block 參數(shù)為 False(不阻塞),則直接引發(fā) queue.EMPTY 異常。
Queue.get_nowait(item):從隊(duì)列中取出元素,不阻塞。相當(dāng)于在上一個(gè)方法中將 block 參數(shù)設(shè)置為 False。
其實(shí)我們想想,這個(gè)隊(duì)列,是python進(jìn)行封裝的,那么我們可以用在線程間的通信;同時(shí)也是可以用做一個(gè)數(shù)據(jù)結(jié)構(gòu);先進(jìn)先出就是隊(duì)列,后進(jìn)先出就是棧;我們用這個(gè)棧寫個(gè)十進(jìn)制轉(zhuǎn)二進(jìn)制的例子:
沒毛病,可以正常的打印;其中需要注意的就是,maxsize在初始化的時(shí)候如果是0或者是個(gè)負(fù)數(shù)的話,那么就會(huì)是不限制大小;
那么其實(shí)我們想想,我們?nèi)绻米鼍€程通信的話,我們兩個(gè)線程,可以把隊(duì)列設(shè)置為1的大小,如果是1對(duì)多,比如是創(chuàng)建者和消費(fèi)者的關(guān)系,我們完全可以作為消息隊(duì)列,比如說(shuō)創(chuàng)建者一直在創(chuàng)建一些東西,然后放入到消息隊(duì)列里面,然后供消費(fèi)著使用;就是一個(gè)很好的例子;所以,其實(shí)說(shuō)是消息隊(duì)列,也就是隊(duì)列,沒差;
=====================================================================
下面來(lái)看一下事件
Event 是一種非常簡(jiǎn)單的線程通信機(jī)制,一個(gè)線程發(fā)出一個(gè) Event,另一個(gè)線程可通過(guò)該 Event 被觸發(fā)。
Event 本身管理一個(gè)內(nèi)部旗標(biāo),程序可以通過(guò) Event 的 set() 方法將該旗標(biāo)設(shè)置為 True,也可以調(diào)用 clear() 方法將該旗標(biāo)設(shè)置為 False。程序可以調(diào)用 wait() 方法來(lái)阻塞當(dāng)前線程,直到 Event 的內(nèi)部旗標(biāo)被設(shè)置為 True。
Event 提供了如下方法:
is_set():該方法返回 Event 的內(nèi)部旗標(biāo)是否為True。
set():該方法將會(huì)把 Event 的內(nèi)部旗標(biāo)設(shè)置為 True,并喚醒所有處于等待狀態(tài)的線程。
clear():該方法將 Event 的內(nèi)部旗標(biāo)設(shè)置為 False,通常接下來(lái)會(huì)調(diào)用 wait() 方法來(lái)阻塞當(dāng)前線程。
wait(timeout=None):該方法會(huì)阻塞當(dāng)前線程。
這里我想解釋一下;其實(shí)對(duì)于事件來(lái)說(shuō),事件可以看成和條件變量是一樣的,只是我們說(shuō)說(shuō)不一樣的地方;
1、對(duì)于事件來(lái)說(shuō),一旦觸發(fā)了事件,也就是說(shuō),一旦set為true了,那么就會(huì)一直為true,需要clear調(diào)內(nèi)部的標(biāo)志,才能繼續(xù)wait;但是conditon不是,他是一次性的喚醒其他線程;
2、conditon自己帶鎖;事件呢?不是的;沒有自己的鎖;比如說(shuō)有一個(gè)存錢的線程,有一個(gè)是取錢的線程;那么存錢的線程要存錢;需要怎么辦呢?1、發(fā)現(xiàn)銀行沒有錢了(is_set判斷);2、鎖住銀行;3、存錢;4、釋放銀行;5、喚醒事件;對(duì)于取錢的人;1、判斷是否有錢;2、被喚醒了,然后鎖住銀行;3、開始取錢;4、清理告訴存錢的人,我沒錢了(clear);5、釋放鎖;6、等著錢存進(jìn)去;
其實(shí)說(shuō)白了,就是記住一點(diǎn);這個(gè)旗標(biāo)需要自己clear就對(duì)了
寫個(gè)例子,怕以后忘了怎么用;
其實(shí)時(shí)間和信號(hào)量比較像;但是信號(hào)量不用自己清除標(biāo)志位;但是事件是需要的;
if py_obj:
print '非空'
if py_obj is None:
print '空'
if not py_obj:
非空
本文標(biāo)題:隊(duì)列判空函數(shù)python 隊(duì)列判空條件
轉(zhuǎn)載來(lái)于:http://chinadenli.net/article26/dojdccg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站營(yíng)銷、手機(jī)網(wǎng)站建設(shè)、做網(wǎng)站、標(biāo)簽優(yōu)化、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容