它是pythonic:命名lambdas

发布于 2021-01-29 19:36:04

我开始欣赏lambda表达式在python中的价值,尤其是在函数编程map,函数返回函数等方面。但是,我也一直在函数中命名lambda,因为:

  • 我多次需要相同的功能,并且不想重复代码。
  • 该功能特定于其出现的功能。它不需要其他地方。

当遇到满足以上条件的情况时,我一直在编写一个命名的lambda表达式,以进行DRY和狭义范围功能。例如,我正在编写一个在某些numpy数组上运行的函数,并且我需要对传递给该函数的所有数组进行适度繁琐的索引编制(可以很容易地放在一行上)。我编写了一个名为lambda表达式来进行索引编制,而不是编写整个其他函数或在整个函数定义中多次复制/粘贴索引。

def fcn_operating_on_arrays(array0, array1):
    indexer = lambda a0, a1, idx: a0[idx] + a1[idx]

    # codecodecode

    indexed = indexer(array0, array1, indices)

    # codecodecode in which other arrays are created and require `indexer`

    return the_answer

这是对python的lambda的滥用吗?我应该吸收它并定义一个单独的功能吗?

关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这不是Pythonic,PEP8不建议这样做

    始终使用def语句而不是将lambda表达式直接绑定到标识符的赋值语句。

    是:

    def f(x): return 2*x
    

    没有:

    f = lambda x: 2*x
    

    第一种形式意味着结果函数对象的名称专门'f'代替了generic
    '<lambda>'。通常,这对于回溯和字符串表示形式更为有用。使用赋值语句消除了lambda表达式可以提供的优于显式def语句的唯一好处(即,它可以嵌入较大的表达式中)

    经验法则是考虑其定义:lambdas表达式是匿名函数。如果您命名,它将不再是匿名的。:)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看