关于使用的参数的lambda说明

时间:2018-11-13 02:15:26

标签: python list lambda

我想询问一些关于lambda参数的简单问题。

我了解lambda的功能是如何工作的,但是当涉及到这一点时,我感到困惑的是哪个参数。

示例:

from functools import reduce

# Simple example so that I could understand based on the explanation from experts
# here. You could modify as however you wish to explain it.
product = reduce(lambda x, y: x + y, [1,2,3,4])

这里是一个比较短的版本:

product = 0
for x in [1,2,3,4]:
    product = product + x
print(product)

现在,我的问题是在第一个lambda示例中,x是列表的变量还是y是列表的变量? xy的默认值是什么(判断其中一个属于产品?因为我没有为“ lambda示例”和第二个示例为其初始化初始值)我已初始化。)

2 个答案:

答案 0 :(得分:1)

使用:

product = reduce(lambda x, y: x + y, [1, 2, 3, 4])

每次调用lambda函数时,x参数是运行总计(或 accurated 值),并且y将成为可迭代{{1 }}。

由于您没有指定可选的 initializer 参数,因此[1, 2, 3, 4]的值将设置为iterable的第一个元素(在这种情况下为x),并且对1的第一次调用以iterable的 second 元素开头,否则lambda将作为初始化程序传递的值,并且第一次调用将传递第一次将iterable的第一个参数设为x

答案 1 :(得分:0)

python中的canDropPredicate(): Function { const me = this; return (drag: CdkDrag<ResourceNode>, drop: CdkDropList<ResourceNode>): boolean => { const fromBounds = drag.dropContainer.element.nativeElement.getBoundingClientRect(); const toBounds = drop.element.nativeElement.getBoundingClientRect(); if (!me.intersect(fromBounds, toBounds)) { return true; } // This gross but allows us to access a private field for now. const pointerPosition: Point = drag['_dragRef']['_pointerPositionAtLastDirectionChange']; // They Intersect with each other so we need to do some calculations here. if (me.insideOf(fromBounds, toBounds)) { return !me.pointInsideOf(pointerPosition, fromBounds); } if (me.insideOf(toBounds, fromBounds) && me.pointInsideOf(pointerPosition, toBounds)) { return true; } return false; }; } intersect(r1: DOMRect | ClientRect, r2: DOMRect | ClientRect): boolean { return !(r2.left > r1.right || r2.right < r1.left || r2.top > r1.bottom || r2.bottom < r1.top); } insideOf(innerRect: DOMRect | ClientRect, outerRect: DOMRect | ClientRect): boolean { return innerRect.left >= outerRect.left && innerRect.right <= outerRect.right && innerRect.top >= outerRect.top && innerRect.bottom <= outerRect.bottom && !( innerRect.left === outerRect.left && innerRect.right === outerRect.right && innerRect.top === outerRect.top && innerRect.bottom === outerRect.bottom ); } pointInsideOf(position: Point, rect: DOMRect | ClientRect) { return position.x >= rect.left && position.x <= rect.right && position.y >= rect.top && position.y <= rect.bottom; } 接收一个列表,并返回一个列表,其中每个元素均已根据某些功能进行了修改。您似乎想将列表作为输入并获得一个结果,在这种情况下,map()和lambda函数都不特别有用,而简单的map()循环可能是最好的方法这个。