-5
我有這段代碼,我讀了一些關於將python 2轉換爲python 3的內容,但是我遇到了問題。將lambda函數轉換爲python 3
lambda(k, val): (k,
re.sub("&(#\d+|#x[0-9a-fA-F]+|\w+);",
self._convertEntities,
val))
我有這段代碼,我讀了一些關於將python 2轉換爲python 3的內容,但是我遇到了問題。將lambda函數轉換爲python 3
lambda(k, val): (k,
re.sub("&(#\d+|#x[0-9a-fA-F]+|\w+);",
self._convertEntities,
val))
我不認爲lambda表達式完全符合您通常期望它在Python 2中執行的操作。
Lambda表達式不會在其參數列表周圍放置括號。正常的寫法是lambda k, val: ...
。 Python 2中會,然而,解析您的lambda表達式作爲一個參數的函數,它會做拆包元組上的說法:
>>> a = lambda(a, b): a + b
>>> a(1, 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes exactly 1 argument (2 given)
>>> a((1, 2))
3
然而,tuple argument unpacking was abolished in Python 3,這就是爲什麼你在該聲明出現語法錯誤。你要麼必須刪除括號並轉換調用點調用函數有兩個參數,或在lambda表達式本身使用顯式拆包,有點像這樣:
lambda tup: (tup[0], re.sub(..., ..., tup[1]))
到底是什麼問題? –
這是Python 2中的代碼,我不知道如何將其轉換爲Python 3 – user2771714