我是一个c ++人,在python中学习lambda函数,并想知道它的内部。在发布之前做了一些分析。无论如何,这段代码出现在我面前。
&LT 1为卤素;我不太明白lambda函数的用途。我们试图获得一个功能模板?如果是这样,为什么我们不在功能输入中设置2个参数?
&LT 2 - ;此外,make_incrementor(42)
,此时相当于返回x+42
,x是0
,1
和f(0)
中的f(1)
?< / p>
&LT 3的密度;对于f(0)
,它与>>>f = make_incrementor(42)
的效果不一样吗?对于f(0)
,x
和n
的值分别是多少?
欢迎任何作品!感谢。
>>> def make_incrementor(n):
... return lambda x: x + n
...
>>> f = make_incrementor(42)
>>> f(0)
42
>>> f(1)
43
答案 0 :(得分:1)
是的,这类似于C ++ int
模板。但是,而不是在编译时(是的,Python(至少对于CPython)是“已编译”),该函数是在运行时创建的。为什么在这种特定情况下使用lambda还不清楚,可能只是为了证明函数可以从其他函数返回而不是实际使用。但是,有时候,如果你需要一个带有指定数量参数的函数,那么这样的语句可能是必要的(例如对于map
,该函数必须使用与map
给出的可迭代次数相同的参数个数。但是函数的行为应该依赖于其他参数。
make_incrementor
返回一个函数,将n
(此处为42
)添加到传递给该函数的任何x
。在您的情况下,您尝试的x
值为0
和“1”。
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
仍然可能是琐事,但它显示了创建一般功能并将数据烘焙出来。