使用PyCharm隐藏内置名称“function”和“module”

2024-04-20 06:40:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下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也有同样的问题。

编辑:

在Python 3中,__builtin__现在是builtins


Tags: 模块inimport名称dirnotfunctionok
2条回答

根据PY-8672,自2014年3月以来,通过此检查可以忽略某些名称。打开“设置”,搜索“隐藏内置项”,单击检查名称,然后使用“选项”部分添加检查应列出的名称。

functionbuiltins.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] 

记住,我用的是“defined”和defined。看看这个荒谬的地方:

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中的一个bug(也许它不应该查看.pyi文件中的“definitions”)还是一个预期的行为。

无论如何,模块函数可能都不是好的变量名。

相关问题 更多 >