python中join的用法
㈠ python queue中 task_done()和join()問題 代碼如下
consumer.run if data == 2 的else分支少了 self.q.task_done()。加上就正常了。
#!/usr/bin/envpython3
#coding=utf-8
"""
mole/programdocument
"""
fromqueueimportQueue
fromthreadingimportThread
classprocer(Thread):
def__init__(self,q):
super().__init__()
self.q=q
defrun(self):
self.count=5
whileself.count>0:
ifself.count==1:
self.count-=1
self.q.put(2)
else:
self.count-=1
self.q.put(1)
classconsumer(Thread):
def__init__(self,q):
super().__init__()
self.q=q
defrun(self):
whileTrue:
data=self.q.get()
ifdata==2:
print("stopbecausedata=",data)
self.q.task_done()
break
else:
print("dataisgood,data=",data)
self.q.task_done()
defmain():
qq=Queue()
p=procer(qq)
c=consumer(qq)
p.setDaemon(True)
c.setDaemon(True)
p.start()
c.start()
qq.join()
print("queueiscomplete")
if__name__=='__main__':
main()
㈡ 求python中join和split的詳解
string.split() 以後的返回值就是一個由幾個string構成的list也就是由string構成的數組,
b = a.split()得到 b = ['i','love','python'] ,
'*'.join(b)是string '*' 的方法而不是list的方法。
㈢ Python中threading的join和setDaemon的區別及用法
上海藍盟為你解答:
Python多線程編程時,經常會用到join()和setDaemon()方法,今天特地研究了一下兩者的區別。
1、join ()方法:主線程A中,創建了子線程B,並且在主線程A中調用了B.join(),那麼,主線程A會在調用的地方等待,直到子線程B完成操作後,才可以接著往下執行,那麼在調用這個線程時可以使用被調用線程的join方法。
原型:join([timeout]) 裡面的參數時可選的,代表線程運行的最大時間,即如果超過這個時間,不管這個此線程有沒有執行完畢都會被回收,然後主線程或函數都會接著執行的。
例子:
[python] view plain
import threading
import time
class MyThread(threading.Thread):
def __init__(self,id):
threading.Thread.__init__(self)
self.id = id
def run(self):
x = 0
time.sleep(10)
print self.id
if __name__ == "__main__":
t1=MyThread(999)
t1.start()
for i in range(5):
print i
執行後的結果是:
[python] view plain
0
1
2
3
4
999
機器上運行時,4和999之間,有明顯的停頓。解釋:線程t1 start後,主線程並沒有等線程t1運行結束後再執行,而是先把5次循環列印執行完畢(列印到4),然後sleep(10)後,線程t1把傳進去的999才列印出來。
現在,我們把join()方法加進去(其他代碼不變),看看有什麼不一樣,例子:
[python] view plain
import threading
import time
class MyThread(threading.Thread):
def __init__(self,id):
threading.Thread.__init__(self)
self.id = id
def run(self):
x = 0
time.sleep(10)
print self.id
if __name__ == "__main__":
t1=MyThread(999)
t1.start()
t1.join()
for i in range(5):
print i
執行後的結果是:
[python] view plain
999
0
1
2
3
4
機器上運行時,999之前,有明顯的停頓。解釋:線程t1 start後,主線程停在了join()方法處,等sleep(10)後,線程t1操作結束被join,接著,主線程繼續循環列印。
2、setDaemon()方法。主線程A中,創建了子線程B,並且在主線程A中調用了B.setDaemon(),這個的意思是,把主線程A設置為守護線程,這時候,要是主線程A執行結束了,就不管子線程B是否完成,一並和主線程A退出.這就是setDaemon方法的含義,這基本和join是相反的。此外,還有個要特別注意的:必須在start() 方法調用之前設置,如果不設置為守護線程,程序會被無限掛起。
例子:就是設置子線程隨主線程的結束而結束:
[python] view plain
import threading
import time
class MyThread(threading.Thread):
def __init__(self,id):
threading.Thread.__init__(self)
def run(self):
time.sleep(5)
print "This is " + self.getName()
if __name__ == "__main__":
t1=MyThread(999)
t1.setDaemon(True)
t1.start()
print "I am the father thread."
執行後的結果是:
[python] view plain
I am the father thread.
可以看出,子線程t1中的內容並未打出。解釋:t1.setDaemon(True)的操作,將父線程設置為了守護線程。根據setDaemon()方法的含義,父線程列印內容後便結束了,不管子線程是否執行完畢了。
程序運行中,執行一個主線程,如果主線程又創建一個子線程,主線程和子線程就分兵兩路,分別運行,那麼當主線程完成想退出時,會檢驗子線程是否完成。如果子線程未完成,則主線程會等待子線程完成後再退出。但是有時候我們需要的是,只要主線程完成了,不管子線程是否完成,都要和主線程一起退出,這時就可以用setDaemon方法了。
所以,join和setDaemon的區別如上述的例子,它們基本是相反的。
㈣ python join的問題
join是string類型的一個函數,用調用他的字元串去連接參數里的列表
『,'.join調用者是',',python裡面萬物皆對象,','是一個string類型的對象,調用join函數,將後面的列表裡的值用逗號連接成新的字元串;
str(i) for i in list 這是一個映射,就是把list中每個值都轉換成字元串。
如果你要str(i) for i in list的結果是['1', '2', '3', '4', '5', '6', '7']
㈤ Python的join方式和+拼接字元串效率差多少
join()方法使用指定的字元串作為連接符對序列中的多個字元串進行連接。需要計算每個字元串的位置,比較慢
+操作是連接原始字元串的利器,效率是最高的。
㈥ 一般python中的os.path.join()什麼時候會用到呢
是在拼接路徑的時候用的。舉個例子,
os.path.join(「home」, "me", "mywork")
在Linux系統上會返版回
「home/me/mywork"
在Windows系統上會返回
"home\me\mywork"
好處是可權以根據系統自動選擇正確的路徑分隔符"/"或"\"
㈦ Python里 print("".join([d.get(c,c) for c in s])) 這句是什麼意思
print("".join([d.get(c,c) for c in s]))
首先是一個循環for c in s,這個就是變數輸入的字元串;
然後d.get(c,c) for c in s,對於每一個c,從內d裡面獲取對應的容value
最後"".join把上面的結果拼接成一個字元串。
等價於下面代碼:
tmp=[]
forcins:
tmp.append(d.get(c,c))
print"".join(tmp)
㈧ python join怎麼使用
就是把一個list中所有的串按照你定義的分隔符連接起來,比如: list = ['a','b','c'] sep = '|' join(list,sep)的結果就是a|b|c
㈨ python 列表怎麼調用join
具體作用如下:
join(): 連接字元串數組。將字元串、元組、列表中的元素以指定的字元(分隔符)連接生成一個新的字元串
os.path.join(): 將多個路徑組合後返回
㈩ 怎麼用python string join
>>> A=[['A','B'],['a','b']]
>>> A=[''.join(s) for s in A]
>>> A
['AB', 'ab']