tem*_*ame 9 python lambda function python-3.x
前几天我写了一个类似于以下内容的lambda:
fetch = lambda x: myDictionaryVariable.get(x, "")
Run Code Online (Sandbox Code Playgroud)
但是现在我刚刚学会了这一点,你可以用一个;
而不是换行来分隔python语句,然后学会了即使用冒号也可以在1行上做简单的语句.所以我意识到我也可以这样写:
def fetch(x): return myDictionaryVariable.get(x, "")
Run Code Online (Sandbox Code Playgroud)
不是我在;
这里使用,但如果我需要,我可以为我的1行功能提供更多功能.我可以写:
def strangeFetch(x): y = "unicorn"; return menu.get(x, y)
Run Code Online (Sandbox Code Playgroud)
那么为什么我需要lambdas呢?为什么他们甚至是python的一部分?鉴于此,他们添加了什么?
Lambda函数不需要名称.它们不会仅仅为仅使用一次的函数阻塞命名空间.
a = [[1], [1, 2], [1, 2, 3]]
print min(a, key = lambda x:len(x))
print locals()
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,虽然我们创建了一个lambda函数(在这种情况下,我们可以直接使用len
),但它并没有添加到本地名称空间.
它们是use和throw类型的函数.除非将它们分配给某些变量,否则它们可以在使用它们的行之后进行GC.
它们不允许任何python语句和赋值,因此它们可能很少受到副作用的信任.
l = [1, 2]
lambda: l = []
Run Code Online (Sandbox Code Playgroud)
这会抛出一个错误SyntaxError: can't assign to lambda
.(你可以改变可变对象).
有时,它们可以用来击败闭合的效果.
lambda
当您想要使用匿名函数作为另一个函数的参数时,此选项很有用.如果仅在该位置使用它,则无需为其指定名称.
将lambda分配给变量的能力刚好超出了语言的正交性:变量可以包含任何类型的值,而lambda创建的函数只是一个值.
归档时间: |
|
查看次数: |
2995 次 |
最近记录: |