python,基本的lambda函数

时间:2014-08-18 18:17:43

标签: python

我是一个c ++人,在python中学习lambda函数,并想知道它的内部。在发布之前做了一些分析。无论如何,这段代码出现在我面前。

&LT 1为卤素;我不太明白lambda函数的用途。我们试图获得一个功能模板?如果是这样,为什么我们不在功能输入中设置2个参数?

&LT 2 - ;此外,make_incrementor(42),此时相当于返回x+42,x是01f(0)中的f(1)?< / p>

&LT 3的密度;对于f(0),它与>>>f = make_incrementor(42)的效果不一样吗?对于f(0)xn的值分别是多少?

欢迎任何作品!感谢。

>>> def make_incrementor(n):
... return lambda x: x + n
...
>>> f = make_incrementor(42)
>>> f(0)
42
>>> f(1)
43

2 个答案:

答案 0 :(得分:1)

  1. 是的,这类似于C ++ int模板。但是,而不是在编译时(是的,Python(至少对于CPython)是“已编译”),该函数是在运行时创建的。为什么在这种特定情况下使用lambda还不清楚,可能只是为了证明函数可以从其他函数返回而不是实际使用。但是,有时候,如果你需要一个带有指定数量参数的函数,那么这样的语句可能是必要的(例如对于map,该函数必须使用与map给出的可迭代次数相同的参数个数。但是函数的行为应该依赖于其他参数。

  2. make_incrementor返回一个函数,将n(此处为42)添加到传递给该函数的任何x。在您的情况下,您尝试的x值为0和“1”。

  3. f = make_incrementor(42)f设置为返回x + 42函数。但是,f(0)返回0 + 42,即42 - 返回的类型和值都不同,因此不同的表达式不会产生相同的效果。

答案 1 :(得分:1)

目的是展示一个玩具lambda回归。它允许您创建一个包含数据的函数。我已经使用了这个类似用途的不太重要的例子。

def startsWithFunc(testString):
    return lambda x: x.find(testString) == 0

然后当我解析时,我创建了一些函数:

startsDesctription   = startsWithFunc("!Sample_description")
startMatrix          = startsWithFunc("!series_matrix_table_begin")

然后在代码中我使用:

 while line:
    #.... other stuff

    if startsDesctription(line):
        #do description work

    if startMatrix(line):
        #do matrix start work

    #other stuff ... increment line ... etc

仍然可能是琐事,但它显示了创建一般功能并将数据烘焙出来。