在导入模块之前,正在从模块调用函数

A function is being called from a module, before the module was imported

我在看 code golf solution, 它的代码是(由 TFeld 编写):

lambda s:all(''.join(p)in s for p in permutations({*s}))
from itertools import*

这怎么可能? 提前致谢!

该代码是空操作。它定义了一个永远不会执行的 lambda,所以 Python 永远不会遇到 NameError。

在导入之前实际执行 lambda itertools 会显示错误。

真的,应该先导入。

PPCG 站点的通常标准允许答案创建满足挑战要求的函数,而无需实际将其保存在任何地方。 lambda创建函数的时候,permutations不可用,但是函数没有执行,所以没有报错。如果由 lambda 创建的函数在此代码块的末尾执行,则 permutations 将在该点可用,因此不会发生错误。

但是,lambda 创建的函数不会存活到 import 之后的那个点。在这段代码的执行过程中,实际上没有一个函数可以满足挑战的要求。函数的依赖项在函数的生命周期结束后才可用。

切换 lambda 和导入将解决此问题,而无需额外字符。