[value](x) 在此 lambda 代码中做了什么?
What does [value](x) do in this lambda code?
这是 this question 中的一段代码,它是 Python 中 switch 语句的替代方法。
result = {
'a': lambda x: x * 5,
'b': lambda x: x + 7,
'c': lambda x: x - 2
}[value](x)
我是 Python 的新手,我不明白它在做什么。所以我知道第一部分是变量赋值 - 但是 [value](x)
做什么?
大括号{}之间定义了一个字典,关键字为'a'、'b'和'c'。这些键的值是 lambda,它们是匿名函数(没有名称的函数)。每个 lambda 定义 x 到 x 函数的映射,具有三种不同的映射,每个键一个。
'[value]' 在字典中查找值。所以如果 value = 'b',它会 return lambda x: x + 7。这个 x 与 (x) 中的 x 无关。例如,lambda 可以定义为 lambda y: y + 7。
'(x)' 然后将该 lambda 应用于 x 的任何值。
所以如果 value = 'b' 且 x = 8,上面的表达式将给出 15 作为答案。
复制 switch 语句的方式很复杂。一种更简洁的方法是定义一个辅助函数,让您可以更直接地表达正在发生的事情:
def switch(v):yield lambda *c: v in c
你可以像这样使用它来获得等效的结果:
for case in switch(value):
if case('a'): result = x + 5
elif case('b'): result = x + 7
elif case('c'): result = x - 2
这是一个非常简单的例子,只是让代码更清晰。当您在每种情况下都有更复杂或不同的事情要做时,这种切换模式就会变得更有价值。您还可以以更像 C 的风格使用它:
for case in switch(letter):
if case('a','A'):
y = complexCalculation(12,4)
result = y + 5
print(y)
break
if case('b','c','d'):
z = factorial(y) **2
result = z + 5
print(z)
break
else: # otherwise (all other cases)
print("invalid value provided")
这是 this question 中的一段代码,它是 Python 中 switch 语句的替代方法。
result = {
'a': lambda x: x * 5,
'b': lambda x: x + 7,
'c': lambda x: x - 2
}[value](x)
我是 Python 的新手,我不明白它在做什么。所以我知道第一部分是变量赋值 - 但是 [value](x)
做什么?
大括号{}之间定义了一个字典,关键字为'a'、'b'和'c'。这些键的值是 lambda,它们是匿名函数(没有名称的函数)。每个 lambda 定义 x 到 x 函数的映射,具有三种不同的映射,每个键一个。
'[value]' 在字典中查找值。所以如果 value = 'b',它会 return lambda x: x + 7。这个 x 与 (x) 中的 x 无关。例如,lambda 可以定义为 lambda y: y + 7。
'(x)' 然后将该 lambda 应用于 x 的任何值。
所以如果 value = 'b' 且 x = 8,上面的表达式将给出 15 作为答案。
复制 switch 语句的方式很复杂。一种更简洁的方法是定义一个辅助函数,让您可以更直接地表达正在发生的事情:
def switch(v):yield lambda *c: v in c
你可以像这样使用它来获得等效的结果:
for case in switch(value):
if case('a'): result = x + 5
elif case('b'): result = x + 7
elif case('c'): result = x - 2
这是一个非常简单的例子,只是让代码更清晰。当您在每种情况下都有更复杂或不同的事情要做时,这种切换模式就会变得更有价值。您还可以以更像 C 的风格使用它:
for case in switch(letter):
if case('a','A'):
y = complexCalculation(12,4)
result = y + 5
print(y)
break
if case('b','c','d'):
z = factorial(y) **2
result = z + 5
print(z)
break
else: # otherwise (all other cases)
print("invalid value provided")