Python 2.7 Python中的开关和lambda
我正在用Python编写一个Gimp插件。在查找switch语句时,我发现了一个带有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,但为了清晰起见,我将使用“常量” 因此,如果我向左对齐,
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)
Myget
返回一个函数,然后当我将它括在括号中并传递一个参数时,它将把标签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)
Myget
返回一个函数,然后当我将它括在括号中并传递一个参数时,它将把标签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)
,或者,您正在打印的不是您认为正在打印的内容。