考虑一个python函数:
def testSetsFromStrings(tt):
x1= [lambda x: x.split(' ') for t in tt]
return x1
让我们用下面的代码调用它:
tt = ['id0 id1 id2 id3 id4',
'id10 id11 id12 id13 id14',
'id20 id21 id22 id23 id24',
' id30 id31 id32 id33 id34',
'id50 id51 id52 id53 id54']
testSetFromStrings(tt)
在x1= ..
行之后放置了一个断点,我们可以看到x1
=
<class 'list'>: [<function testSetsFromStrings.<locals>.<listcomp>.
<lambda> at 0x11cee5730>, <function testSetsFromStrings.<locals>.<listcomp>.
<lambda> at 0x11cee5840>, <function testSetsFromStrings.<locals>.<listcomp>.
<lambda> at 0x11cee58c8>, <function testSetsFromStrings.<locals>.<listcomp>.
<lambda> at 0x11cee5950>, <function testSetsFromStrings.<locals>.<listcomp>.
<lambda> at 0x11cee59d8>]
我不知所措,不知道如何让这个lambda
被热切地评估。这里可以做些什么?
**更新**
所显示的逻辑是所需的多步函数的简化:只关注调用lambda的机制。用直接调用split
替换lambda
并不能解决实际需求。
发布于 2019-01-07 08:01:35
也许你根本不想要lambdas?这是你想要的吗?
def testSetsFromStrings(tt):
x1 = [x.split(' ') for x in tt]
return x1
Lambda是函数:当您调用它们时,它们会被求值。如果您希望它们立即运行,那么您可能根本不需要lambda。
如果你需要调用一个函数,那就调用它:
def testSetsFromStrings(tt):
x1 = [my_function(x) for x in tt]
return x1
发布于 2019-01-07 08:16:15
您正在定义函数,但没有对其应用任何参数:
试试这个吧
x1 = [(lambda x: x.split(' '))(x) for x in tt]
但是,如果函数非常复杂,最好在理解之外提取函数定义,然后使用映射或列表理解。
发布于 2019-01-07 08:04:51
您还可以使用map函数而不是列表理解:
x1 = map(lambda x: x.split(' '), tt)
如果您更喜欢lamda函数。其他地方只需:
x1 = [x.split(' ') for x in tt]
正如其他人也提到的那样。
https://stackoverflow.com/questions/54067064
复制相似问题