2017-10-07 45 views
-1

对于以下4个功能:Python 3并非所有的1行函数都是lambdas?

def test1(a): 
    def result(b): 
    return a+b; 
    return result 

def test2(a): 
    return lambda b: a+b 

test3 = lambda a : lambda b : a+b 

test4 = lambda a : (lambda b : a+b) 

print(test1(2)(3)) 
print(test2(3)(4)) 
print(test3(5)(6)) 
print(test4(7)(8)) 

test1工作正常test1(a)(b)回报A + B
test2正常工作太test2(a)(b)返回A + B
test3test4给出一个语法错误undefined variable a

为什么译员是否可以在test1和2中找到一个,但不能在3或4中找到?
有没有办法将测试函数写成lambda?

+4

尝试运行实际运行的代码 - 它的工作原理。 – MatsLindh

+0

请参阅https://ideone.com/02s6h7显示它正在运行。 –

+0

@roganjosh这当然是我的问题的简化版本。我不认为我需要在我的文章中明确地调用test1和test2。 (但我确实在我自己的代码中尝试过)。如果你喜欢,我会把它添加到这里,但我认为它增加了不必要的混乱。 – fejfo

回答

2

您的代码没问题,您在那里的undefinded variable只是您正在使用的IDE或帮助程序的问题,似乎无法正确捕获lambda作用域。

你可以看到它使用相同的“错误” here enter image description here

+0

关于无法复制的问题的问题应该是封闭的,VS回答。一旦你确定了一个答案,这会让其他人更难以修正他们问题中的任何错误,从而使其不可重现(因为这样做会使答案失效)。 –

+1

@CharlesDuffy,我能够复制它,只需将代码复制/粘贴到repl.it网页中,它们的语法分析器实际上会给出该“错误”,它会在第一次运行后消失。我可以将此添加为附加信息吗? – Netwave

+0

嗯。我倾向于在这一点上看到,如果我们可以鼓励OP来编辑问题以指定哪个工具给出错误,而不是简单地将其描述为来自“Python 3”。 –

相关问题