Python 2.7 Python中的开关和lambda

Python 2.7 Python中的开关和lambda,python-2.7,lambda,Python 2.7,Lambda,我正在用Python编写一个Gimp插件。在查找switch语句时,我发现了一个带有lambda的示例。是的,如果……elif,我可以使用,但我想学习使用lambda 我正在计算裁剪图像的水平偏移量。在width\u to\u trim中,我有需要修剪的宽度(实际宽度减去所需宽度) 我有h_align中的修剪模式;这可以采用已经定义的值HALIGN_LEFT、HALIGN_center和HALIGN_RIGHT;它们基本上分别是0、1和2,但为了清晰起见,我将使用“常量” 因此,如果我向左对齐,

我正在用Python编写一个Gimp插件。在查找switch语句时,我发现了一个带有
lambda
的示例。是的,如果……elif,我可以使用
,但我想学习使用
lambda

我正在计算裁剪图像的水平偏移量。在
width\u to\u trim
中,我有需要修剪的宽度(实际宽度减去所需宽度)

我有
h_align
中的修剪模式;这可以采用已经定义的值
HALIGN_LEFT
HALIGN_center
HALIGN_RIGHT
;它们基本上分别是0、1和2,但为了清晰起见,我将使用“常量”

因此,如果我向左对齐,我将在0处偏移裁剪,如果在中间,我将在图像的一半处开始,如果我想向右对齐,我必须在整个额外位偏移裁剪

这是我的代码(现在经过编辑,在
get
中包含逗号和lambda参数):

当我打印
crop_x
时,我得到:

<function <lambda> at 0x1048eca28>


很明显,我只剩下一个函数,而不是一个值。有什么想法吗?

我的开关代码是这样工作的:

switcher = {
    HALIGN_LEFT: lambda x: 0,
    HALIGN_CENTRE: lambda x: x/2,
    HALIGN_RIGHT: lambda x: x,
}
crop_x = (switcher.get(h_align))(width_to_trim)
My
get
返回一个函数,然后当我将它括在括号中并传递一个参数时,它将把标签
crop_x
分配给计算值,而不是lambda


此外,在
HALIGN_LEFT
的情况下,我不能简单地分配0:我必须分配一个返回0的函数,否则当我分配
crop_x
时,我会得到一条错误消息,因为我会将
int
当作一个函数来处理。

我的开关代码是这样工作的:

switcher = {
    HALIGN_LEFT: lambda x: 0,
    HALIGN_CENTRE: lambda x: x/2,
    HALIGN_RIGHT: lambda x: x,
}
crop_x = (switcher.get(h_align))(width_to_trim)
My
get
返回一个函数,然后当我将它括在括号中并传递一个参数时,它将把标签
crop_x
分配给计算值,而不是lambda


此外,在
HALIGN_LEFT
的情况下,我不能简单地分配0:我必须分配一个返回0的函数,否则当我分配
crop_x
时,我会得到一条错误消息,因为我会将
int
视为一个函数。

考虑在switcherindecd@SwadhikarC内的每个dict元素后面加一个逗号!它仍然没有做我想要的。还是不全好,;当我打印crop_x时,它仍然有一个lambda。我将get行更改为
crop\u x=switcher.get(h\u align)(width\u to\u trim)
,但仍然是相同的问题。您是否删除了.pyc文件?此外,您的代码将在
HALIGN\u LEFT
上中断。您所描述的内容几乎不可能。一定是打字错误,例如
switcher.get(h\u align,width\u to\u trim)
,或者你不是在打印你认为你在打印的东西,而是考虑在SwadhikarC的每一个DICT元素之后有一个逗号。它仍然没有做我想要的。还是不全好,;当我打印crop_x时,它仍然有一个lambda。我将get行更改为
crop\u x=switcher.get(h\u align)(width\u to\u trim)
,但仍然是相同的问题。您是否删除了.pyc文件?此外,您的代码将在
HALIGN\u LEFT
上中断。您所描述的内容几乎不可能。一定是打字错误,例如
switcher.get(h\u align,width\u to\u trim)
,或者,您正在打印的不是您认为正在打印的内容。