它是pythonic:命名lambdas吗
我开始欣赏python中lambda表达式的价值,尤其是在函数编程方面,它是pythonic:命名lambdas吗,python,lambda,Python,Lambda,我开始欣赏python中lambda表达式的价值,尤其是在函数编程方面,map等。不过,我也一直在函数中命名lambda,因为: 我多次需要相同的功能,不想重复代码 该功能特定于其出现的功能;其他地方不需要它 当我遇到满足上述条件的情况时,我一直在编写一个命名的lambda表达式,以干燥和缩小功能范围。例如,我正在编写一个在一些numpy数组上运行的函数,我需要对传递给该函数的所有数组(可以很容易地放在一行上)进行一些相当繁琐的索引。我编写了一个命名的lambda表达式来进行索引,而不是编写
map
等。不过,我也一直在函数中命名lambda,因为:
- 我多次需要相同的功能,不想重复代码
- 该功能特定于其出现的功能;其他地方不需要它
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 lambdas的滥用吗?我应该接受它并定义一个单独的函数吗
编辑
可能值得链接。它们在功能上(没有双关语)完全相同
indexer = lambda a0, a1, idx: a0[idx] + a1[idx]
def indexer(a0, a1, idx):
return a0[idx] + a1[idx]
如果你对其中一个有审美偏好,那么就使用它
我编写了一个命名的lambda表达式来进行索引,而不是编写一个完整的其他函数
那么,您正在编写一个完整的其他函数。你只是用一个lambda表达式写的
为什么不使用def
?您可以获得更好的堆栈跟踪和更大的语法灵活性,并且不会丢失任何东西。这不像def
不能在另一个函数中出现:
def fcn_operating_on_arrays(array0, array1):
def indexer(a0, a1, idx):
return a0[idx] + a1[idx]
...
这不是Pythonic,而是:
始终使用def语句而不是
将lambda表达式直接绑定到标识符
是的:
def f(x): return 2*x
否:
f = lambda x: 2*x
第一种形式表示结果函数对象的名称为
特别是'f'
而不是泛型'
。这是更多
通常用于回溯和字符串表示。用途
转让声明中的条款消除了lambda的唯一利益
表达式可以在显式def语句上提供(即它可以
嵌入到更大的表达式中)
这方面的一条经验法则是:lambdas表达式是匿名函数。如果你说出它的名字,它就不再是匿名的了。:) 不,它不是蟒蛇。根据定义,lambda是匿名函数,例如用于简化函数作为参数的用法(如在
sort()
中),您可以命名它,但最好使用更容易理解的已知def
。在另一个函数中,def
的pythonic有多大?每当我看到有人这样做时,他们就是在滥用它。@joshua.r.smith:在另一个函数中放入def
是非常好的。当人们想要结束的时候,他们总是为装饰师或其他案件这样做。我个人更喜欢在内部函数不使用任何闭包变量时避免它,因为能够访问函数进行测试或交互使用很方便。