用lambda直接替换_not_divisible函数,会出不一样结果,原理上说不通啊
Topic source自问自答,算是明白一半吧,lambda函数不记录编写时的上下文环境,只按照运行时上下文环境临时生成函数,所以直接用lambda函数替换的话,n的值会全部用当时的n值代替:
n = 3
f = lambda x: (print(f'n = {n}')) or (x % n > 0)
n = 4
print(f(9))
==>n = 4 False
甚至lambda函数的函数体时允许出现lambda之前未定义的变量,只要在调用前赋值就行。
所以前面的n = 3删除掉也能正常运行不报错。
感觉python和lisp确实还是在lambda上有区别
- 1
静水流深
生成素数的代码最后一行,如果用lambda直接替换:
it = filter(lambda x: x % n > 0, it)
结果就会出现很多非素数,按道理不应该啊,求大神解惑!