【问题标题】:Equivalent to Lambda Expressions in Python等价于 Python 中的 Lambda 表达式
【发布时间】:2012-12-02 07:22:35
【问题描述】:

我执行的一个常见操作是将字母列表连接到单词(字符串)列表中。

我通常使用列表推导:

lists_of_letters = [["m", "y"], ["d", "o", "g"], ["s", "k", "i", "p"]]
list_of_words = ["".join(a_list_of_letters) for a_list_of_letters in lists_of_letters]
# list_of_words == ["my", "dog", "skip"]

或者有时更实用:

list_of_words = map(lambda x: "".join(x), lists_of_letters)

我想知道是否有比使用 lambda 表达式更好的方法来编写 map 调用所需的函数。我正在尝试学习 operatorfunctools 来扩展我的 Python 函数式编程能力,但在这种情况下我似乎找不到使用它们的明确方法。

【问题讨论】:

    标签: python lambda functional-programming


    【解决方案1】:

    在这种情况下,您实际上可以直接说map(''.join, lists_of_letters)

    In [1]: lists_of_letters = [["m", "y"], ["d", "o", "g"], ["s", "k", "i", "p"]]
    In [2]: map(''.join, lists_of_letters)
    Out[2]: ['my', 'dog', 'skip']
    

    因为''.join 本身就是一个接受单个参数的函数(空字符串上的绑定方法):

    In [3]: ''.join
    Out[3]: <built-in method join of str object at 0x100258620>
    

    也就是说,这里可能不是更好本身,因为它在 IMO 的可读性有点差

    【讨论】:

    • 谢谢,我完全忘记了绑定方法也是一等函数。这就是为什么我在 partial 方面没有取得任何进展。
    【解决方案2】:

    这里不需要 lambda 函数:

    In [26]: map("".join, lists_of_letters)
    Out[26]: ['my', 'dog', 'skip']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-07
      • 2012-06-19
      • 2012-08-29
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多