-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