RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 881165
Accepted
Duncan
Duncan
Asked:2020-09-14 14:27:02 +0000 UTC2020-09-14 14:27:02 +0000 UTC 2020-09-14 14:27:02 +0000 UTC

如何将 lambda 作为参数传递给生成器?

  • 772

我正在尝试这样做:

foo = lambda x: x > 0
lst = [-2, 1, 0, -5, 8]

filtered_lst = [x for x in lst if foo ]
print(filtered_lst)

不工作。
虽然它是这样工作的:

filtered_lst = list(filter(foo, lst))
print(filtered_lst)

问题是什么?

python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Eugene Dennis
    2020-09-14T15:30:09Z2020-09-14T15:30:09Z

    你lambda的没有参数,并在条件中取值<function <lambda> at 0x00000000030705F8>。默认值为True,因此您的列表没有更改(相当于[x for x in lst if 1==1])。

    如果您添加一个调用()和一个参数,那么该函数将起作用:

    filtered_lst = [x for x in lst if foo(x)]
    print filtered_lst
    # [1, 8]
    

    顺便说一句,与列表中的条件有关就足够了[x for x in lst if x > 0]

    您还可以注意到,您将lambda它用作普通函数,比较,记录短了几个字符,只是:

    def foo(x): return x > 0
    foo = lambda x: x > 0
    

    在我看来,在没有声明的情况下使用 lambda 是合理的,通常作为输入参数,例如:

    t = [[1,22],[3,4],[10,5,16]]
    print sorted(t, key=lambda x: sum(x))
    #[[3, 4], [1, 22], [10, 5, 16]]
    

    如果你不使用 lambda,那么它会变得很麻烦,并且可能在其他任何地方都不需要该函数,这不会使代码更具可读性:

    def my_sort(x):
        return sum(x)
    print sorted(t, key=my_sort)
    

    Filter是一个“独立”的工具,让我们考虑一下它的参数:

    help(filter)
    # Help on built-in function filter in module __builtin__:
    # filter(...)
    #    filter(function or None, sequence) -> list, tuple, or string
    def my_filter(x): return x > 0
    print filter(my_filter, [-2, 1, 0, -5, 8]) # не нужно на него еще list() накладывать
    # [1, 8] 
    

    函数(没有调用)和序列。在您的工作示例中,您正确指定了函数名称并filter执行了“您的”任务。在简单的列表表达式中,为了使函数工作,必须调用它。

    另外...“独立”工具(包括filter, map)支持以下语法:

    p = [1, 2, 2.5]
    print filter(int, p)
    # [1, 2]
    
    t = [1, 2, 3]
    print map(str, t)
    #['1', '2', '3']
    
    • 7

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5