我有以下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
。
根据PY-8672,自2014年3月以来,通过此检查可以忽略某些名称。打开“设置”,搜索“隐藏内置项”,单击检查名称,然后使用“选项”部分添加检查应列出的名称。
function
在builtins.pyi
中“定义”:记住,我用的是“defined”和defined。看看这个荒谬的地方:
提高
然而,如果您这样做
function = 'a'
,IDE会抱怨(如您所注意到的那样)这会隐藏一个内置名称(即使function
显然没有实际定义的)。精确的行为用
module
重复。这是因为(据我所知,如果我错了,任何人都请纠正我)
pyi
文件只提供类型提示(如PEP-484 suggests)。所以,我不确定这个警告是Pycharm的linter中的一个bug(也许它不应该查看
.pyi
文件中的“definitions”)还是一个预期的行为。无论如何,模块和函数可能都不是好的变量名。
相关问题 更多 >
编程相关推荐