我想询问一些关于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
是列表的变量? x
或y
的默认值是什么(判断其中一个属于产品?因为我没有为“ lambda示例”和第二个示例为其初始化初始值)我已初始化。)
答案 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()
循环可能是最好的方法这个。