首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在列表理解中急切地评估lambda

在列表理解中急切地评估lambda
EN

Stack Overflow用户
提问于 2019-01-07 07:59:41
回答 4查看 101关注 0票数 -2

考虑一个python函数:

代码语言:javascript
复制
def testSetsFromStrings(tt):
  x1= [lambda x: x.split(' ') for t in tt]
  return x1

让我们用下面的代码调用它:

代码语言:javascript
复制
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 =

代码语言:javascript
复制
<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并不能解决实际需求。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-01-07 08:01:35

也许你根本不想要lambdas?这是你想要的吗?

代码语言:javascript
复制
def testSetsFromStrings(tt):
    x1 = [x.split(' ') for x in tt]
    return x1

Lambda是函数:当您调用它们时,它们会被求值。如果您希望它们立即运行,那么您可能根本不需要lambda。

如果你需要调用一个函数,那就调用它:

代码语言:javascript
复制
def testSetsFromStrings(tt):
    x1 = [my_function(x) for x in tt]
    return x1
票数 2
EN

Stack Overflow用户

发布于 2019-01-07 08:16:15

您正在定义函数,但没有对其应用任何参数:

试试这个吧

代码语言:javascript
复制
x1 = [(lambda x: x.split(' '))(x) for x in tt]

但是,如果函数非常复杂,最好在理解之外提取函数定义,然后使用映射或列表理解。

票数 1
EN

Stack Overflow用户

发布于 2019-01-07 08:04:51

您还可以使用map函数而不是列表理解:

代码语言:javascript
复制
x1 = map(lambda x: x.split(' '), tt)

如果您更喜欢lamda函数。其他地方只需:

代码语言:javascript
复制
x1 = [x.split(' ') for x in tt]

正如其他人也提到的那样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54067064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档