當前位置:首頁 » 編程語言 » pythondicttostr

pythondicttostr

發布時間: 2024-10-23 17:33:12

python 多線程傳參問題

下面是從python threading模塊摘錄下來的

class threading.Thread(group=None, target=None,
name=None, args=(), kwargs={})

args is the argument tuple for the target invocation. Defaults to
().

kwargs is a dictionary of keyword arguments for the target
invocation. Defaults to {}.

簡單的說就是,線程函數的參數要麼是tuple類型要麼是dict類型,既然python文檔上已經規定好了,那麼就是不能變了,除非重大的版本升級,棄用現在這種方式,不過這是不可能的,再者可以查看threading.Thread類的初始化代碼

classThread(_Verbose):
def__init__(self,group=None,target=None,name=None,
args=(),kwargs=None,verbose=None):
assertgroupisNone,"groupargumentmustbeNonefornow"
_Verbose.__init__(self,verbose)
ifkwargsisNone:
kwargs={}
self.__target=target
self.__name=str(nameor_newname())
self.__args=args
self.__kwargs=kwargs
self.__daemonic=self._set_daemon()
self.__ident=None
self.__started=Event()
self.__stopped=False
self.__block=Condition(Lock())
self.__initialized=True
#sys.
#sys.exc_
self.__stderr=_sys.stderr

看到上面的args和kwargs的賦值情況嗎,你不能像**kwargs這樣來傳參的。

從上面來看,你要使用多線程你就必須遵守這個約定,線程函數參數要麼是tuple,要麼是字典,沒辦法改進。非要改進那就是使用全局變數,不用傳參,但是如果是這樣的話會涉及到線程安全的問題或者叫數據同步問題,如果不加鎖或者其他互斥量的話這個問題會很嚴重。所以還是遵守規定吧

❷ python中使用socket編程,如何能夠通過UDP傳遞一個列表類型的數據

Python中的 list 或者 dict 都可以轉成JSON字元串來發送,接收後再轉回來。


首先

importjson

然後,把 list 或 dict 轉成 JSON

json_string=json.mps(list_or_dict)

如果你用的是Python3,這里的 json_string 會是 str 類型(即Python2的unicode類型),可能需要編碼一下:

if type(json_string) == six.text_type:

json_string = json_string.encode('UTF-8')

用socket發送過去,例如

s.sendto(json_string,address)


對方用socket接收,例如

json_string,addr=s.recvfrom(2048)

把JSON轉成 list 或 dict

list_or_dict=json.loads(json_string)




下面是個完整的例子:


client.py

#!/usr/bin/envpython
#-*-coding:UTF-8-*-

importsocket
importjson
importsix

address=('127.0.0.1',31500)
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
mylist=[1,2,3,4,5,6,7,8,9,10]
json_string=json.mps(mylist)
iftype(json_string)==six.text_type:
json_string=json_string.encode('UTF-8')
s.sendto(json_string,address)
s.close()


server.py

#!/usr/bin/envpython
#-*-coding:UTF-8-*-

importsocket
importjson

address=('127.0.0.1',31500)
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(address)
json_string,addr=s.recvfrom(2048)
mylist=json.loads(json_string)
print(mylist)
s.close()


請先運行server.py,再運行client.py

❸ Python中的返回值問題!!!

首先,代碼有誤,你想調用的應該是
sorted([4,3,2,1])
reversed([4,3,2,1])

然後,你所說的reversed的返回值類型也不正確。
sorted返回的是list,reversed返回的是iterator。
list你應該很熟悉了。iterator和list是完全不同的東西。簡單的說iterator只是提供一個介面,每次迭代可以產生一個值,到沒有值為止。iterator在很多語言裡面都有實現。在python裡面主要用在for循環和list comprehension。

iterator和list/tuple/dict/set等容器的關系:
1.python內置的容器類幾乎都實現了iterator介面。
顯式獲取某個容器的iterator可以調用iter函數:
l = [1,2,3,4]
i = iter(l)
//現在i就是一個list iterator。可以用來遍歷l這個list.
i.next() # 1
i.next() # 2
//每一個iterator都必須實現next方法。並且在沒有元素時拋出StopIteration異常。

在for語句和list comprehension中,都是隱式調用了這個函數。所以可以直接
for obj in some_container:
pass

2.某些容器可以通過iterator進行初始化,比如list
l = [1,2,3,4]
i = iter(l)
l2 = list(i)

最後,沒有列表和列表對象這種說法。這兩者一般都是指列表對象(instance of the type list)。如果你是想說列表類(the list type)本身,可以這樣得到:
type([])
或者
[].__class__

❹ python語法:HandlerType = Callable[[Event], None]這句是什麼意思

這就是一個簡單的變數定義,Callable的類型也許是dict,也許是list(具體你可以運行的時候type一下),後面的中括弧就是下標而已
這是框架設計問題,不是什麼高級的python語法

熱點內容
sqlserver教程視頻 發布:2024-10-23 19:30:53 瀏覽:775
phpsql2005 發布:2024-10-23 19:18:48 瀏覽:118
酒網站源碼 發布:2024-10-23 19:17:27 瀏覽:865
安卓技術棧是什麼 發布:2024-10-23 19:12:00 瀏覽:423
安卓漏洞有什麼後果 發布:2024-10-23 19:06:34 瀏覽:482
資料庫的特點是 發布:2024-10-23 18:54:21 瀏覽:147
linux最後一個字元 發布:2024-10-23 18:52:48 瀏覽:633
安卓瀏覽器特別卡什麼原因 發布:2024-10-23 18:51:54 瀏覽:813
文件夾查看大圖 發布:2024-10-23 18:45:50 瀏覽:545
大佬寫腳本需要多久 發布:2024-10-23 18:44:10 瀏覽:148