我有以下 Python 代码:
function = "Developer"
module = "something"
print(function + " on " + module)
在 PyCharm 2017 中,我有一个气泡,上面写着“使用 PyCharm 的阴影内置名称“函数”/“模块””。
我很惊讶,因为“函数”和“模块”不是内置名称。它们也不是关键字:
import __builtin__
import keyword
assert "function" not in dir(__builtin__) # -> OK
assert "module" not in dir(__builtin__) # -> OK
assert "function" not in keyword.kwlist # -> OK
assert "module" not in keyword.kwlist # -> OK
怎么了?
我正在使用 CPython 2.7,但在使用 3.5 和 3.6 时遇到了同样的问题。
编辑:
__builtin__
现在是 Python 3 中的 builtins
。
最佳答案
函数
在builtins.pyi
中“定义”:
class function:
# TODO not defined in builtins!
__name__ = ... # type: str
__qualname__ = ... # type: str
__module__ = ... # type: str
__code__ = ... # type: Any
__annotations__ = ... # type: Dict[str, Any]
请记住,我使用的是“已定义”与已定义。看看这个荒谬的地方:
foo = function
加注
Traceback (most recent call last):
File "main.py", line 117, in <module>
foo = function
NameError: name 'function' is not defined
然而,如果您执行 function = 'a'
,IDE 会提示(如您所见)这隐藏了一个内置名称(即使 function
显然不是实际上定义)。
module
重复了确切的行为。
这是因为(据我所知,如果我错了,请任何人纠正我)pyi
文件仅用于提供类型提示(如 PEP-484 suggests)。
所以,我不确定这个警告是 Pycharm 的 linter 中的错误(也许它不应该查看 .pyi
文件中的“定义”)还是预期的行为。
无论如何,module 和 function 可能都不是好的变量名。
关于python - 使用 PyCharm 隐藏内置名称 "function"和 "module",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45214672/