【问题标题】:python ascribing another name to lambda functionpython为lambda函数赋予另一个名字
【发布时间】:2014-11-08 04:23:56
【问题描述】:

这是一个有点无聊的问题:

我有一段带有很多filter-map-reduce 函数的python 代码。

我发现重新输入有点痛苦,例如。

filter(lambda x: x['identity'] == 'creosote', skits)

每次。我希望能够做类似的事情

filter(f(x['identity']==creosote),skits)

相反。我试过了:

 def f(y):
    f = lambda(x: y) 

但这似乎不起作用。谢谢

我收到了NameError: name 'x' is not defined

我想要完成的是“符号链接”lambda x: 到某个东西,这样我就不必输入它了。

【问题讨论】:

    标签: python lambda closures


    【解决方案1】:

    你可以这样做:

    def f(x):
        return x['identity'] == 'creosote'
    

    那你就做filter(f, skits)

    如果没有对表达式 x['identity'] == 'creosote' 进行评估 f 被调用(这意味着,除其他外,变量x 具有在封闭范围内定义)。如果你想推迟执行,你必须将表达式放在一个函数中,你可以使用 lambda 或完整的def

    Python 没有允许您按照您建议的方式执行“符号链接”的宏。您不能在 Python 中将某些文本别名为其他文本;您只能评估格式正确的表达式。 lambda 不是一个函数,它是 Python 语法的一部分,所以你不能将它别名为别的东西,就像你不能先做 plus = + 然后再做 4 plus 3

    【讨论】:

    • 感谢@BrenBarn,不过正在寻找更通用的东西。 Lambda 每次输入都只是拗口..
    • @TahnoonPasha:就像我说的,没有办法绕过它。如果您不使用lambda,您在函数调用中的任何内容都将在调用函数之前进行评估。没有像你想要的那样做“符号链接”的宏。 (不过,您可以尝试其他缩短内容的方法,这是用户 3 的回答。)
    【解决方案2】:

    如果xy 不同,您可以将xy 传递给函数:

    def f(x, y):
       return (x==y)
    

    并将函数调用为:

    filter(f(x['identity'], 'creosote'),skits)
    

    【讨论】:

    • 您必须传递'creosote'(即作为字符串)。
    • 谢谢我编辑过..以前我认为他的代码中有变量,但他没有在问题中发布......再次感谢。
    • 另外你需要让f在这里接受两个参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 2015-05-08
    • 2021-09-23
    • 2023-03-27
    相关资源
    最近更新 更多