【问题标题】:How to convert a list of values to a list of functions that return these values [duplicate]如何将值列表转换为返回这些值的函数列表[重复]
【发布时间】:2018-05-12 00:21:38
【问题描述】:

我正在尝试将返回值列表转换为返回这些值的函数列表。

lst = [1, 2]
funcs = [lambda: x for x in lst]

这相当于:

x = 2
funcs = [lambda: x, lambda: x]

但我想得到:

funcs = [lambda: 1, lambda 2]

question 解释了为什么会发生这种情况,但没有提供解决方法。

有什么办法可以做到吗?

【问题讨论】:

    标签: python list-comprehension


    【解决方案1】:

    这将起作用:

    [lambda x=x: x for x in lst]
    

    说明:这将创建一个新的函数参数x,它使用当前设置为循环参数x 的默认值进行初始化。调用不带参数的方法时,会返回默认值。

    我建议使用不同的名称以减少混淆:

    [lambda result=i: result for i in lst]
    

    另一种方法是编写自己的 lambda 类函数,该函数定义它返回的嵌套函数。

    【讨论】:

      【解决方案2】:

      你可以使用:

      def f(x):
          return lambda: x
      
      funcs = [f(x) for x in lst]
      

      如果函数更复杂,这种方法可能特别有用,因为在这里您可以将任意函数定义放入f 的主体中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-30
        • 2018-06-25
        • 1970-01-01
        • 2017-10-26
        • 2018-06-10
        • 1970-01-01
        • 2020-09-07
        相关资源
        最近更新 更多