我分享我对以下代码的工作方式的理解。请验证是否正确。我做了一些打印声明,以供我理解。
1 def writer():
2 title = 'Sir'
3 name = (lambda x:title + ' ' + x)
4 print(f"Line 4: {type(name)}")
5 print(f"Line 5: {name}")
6 return name
7 who = writer()
8 print(f"Line 8: {who}")
9 print(f"Line 9: {who('Arthur')}")
输出量
Line 4: <class 'function'>
Line 5: <function writer.<locals>.<lambda> at 0x0000000008FB65E8>
Line 8: <function writer.<locals>.<lambda> at 0x0000000008FB65E8>
Line 9: Sir Arthur
第6行返回一个函数(writer或lambda),该函数存储或映射到第7行的“ who”变量。现在,“ who”成为lambda表达式,并且在第9行以“ Arthur”作为参数调用时,它变为第3行的lambda表达式中的“ x”值。因此,打印“ Sir Arthur”。
最佳答案
函数是Python中的一类对象,无论是由lambda表达式还是由def
语句创建(在这里都是首选)。
def writer():
title = 'Sir'
def name(x):
return title + ' ' + x
return name
who = writer()
上面和类似的东西之间的唯一区别
title = 'Sir'
def who2(x):
return title + ' ' + x
是
who
将始终使用title
返回时的值writer()
。随时可以通过更改全局变量who2
的值来更改who2
的行为。 who
是闭包的示例;函数对象本身保留对最初分配给当前超出范围的局部变量的值的引用。关于python - 验证我对涉及return语句的lambda的理解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59898860/