python - 使用 PyCharm 隐藏内置名称 "function"和 "module"

标签 python pycharm

我有以下 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 文件中的“定义”)还是预期的行为。

无论如何,modulefunction 可能都不是好的变量名。

关于python - 使用 PyCharm 隐藏内置名称 "function"和 "module",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45214672/

相关文章:

python - PyCharm PEP8 代码样式突出显示不起作用

python - 从pycharm中重组的文本文件中删除面包屑

python - 告诉 PyCharm 调试器不要进入装饰器

python - python 2.7 中没有名为 antlr4 的模块

python - 如何将变量转换为keras层

intellij-idea - 如何使用 VM 和 PyCharm 配置自定义 PYTHONPATH?

python - Boost-Python C++ 项目构建,如何使用 Python 中的新库?

Python读取JSON文件并修改

python - 正则表达式-匹配之间捕获文本

python - 如何在 Django 请求处理程序线程中对 SIGTERM 执行代码