当前位置: 首页 > 知识库问答 >
问题:

阴影内置名称“函数”和“模块”与PyCharm

鲁鹤轩
2023-03-14

我有以下Python代码:

function = "Developer"
module = "something"
print(function + " on " + module)

对于PyCharm 2017,我有一个气泡,上面写着“阴影内置名称”function“/”module“With PyChar”。

我很惊讶,因为“函数”和“模块”不是内置名称。它们也不是关键字:

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也有同样的问题

编辑:

__builtin__现在是Python 3中的内置

共有2个答案

朱硕
2023-03-14

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

吕作人
2023-03-14

函数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

然而,如果您执行函数='a',IDE会抱怨(正如您注意到的那样)这会隐藏内置名称(即使函数显然没有实际定义)。

确切的行为与模块重复。

这是因为(据我所知,如果我错了,请任何人纠正我)pyi文件只是为了提供类型提示(如PEP-484所建议的)。

因此,我不确定这个警告是Pycharm的linter中的一个错误(也许它不应该查看.pyi文件中的“定义”)还是一个预期的行为。

不管怎样,模块和函数可能都不是好的变量名。

 类似资料:
  • 阴影 Unity 的灯光可以将 阴影 从一个游戏对象投射到自身的其他部分或是附近的其他游戏对象上。阴影以『扁平』的方式体现游戏对象的尺寸和位置,因此可以为场景添加一定程度的深度和真实感。 场景视图中的游戏对象正在投射阴影 阴影如何工作? 考虑一种最简单的情况,在场景中只有单个光源。光线从光源出发并沿着直线传播,最终可能会碰撞到场景中的游戏对象。一旦光线碰撞到某个游戏对象,光线将无法继续传播和照亮前

  • 问题内容: 创建一个功能 当iam尝试执行此操作时,会出现错误“’Split_On_Upper_Case’不是公认的内置函数名称。”。有人可以解释一下吗? 问题答案: 在前缀中添加[dbo],然后执行相同的命令:

  • 本节我们要讨论下模块和函数。 一个函数是一块用来执行单个操作的代码块。 一个模块则是一个Python文件,里面包含了变量,函数和其他东西。 我们启动Python REPL然后导入math模块,这个模块提供了一些数学方面的函数: >>> import math >>> math.cos(0.0) 1.0 >>> math.radians(275) 4.799655442984406 函数是包含了一

  • 问题内容: 我已经下载并安装了SQL Server2016。尝试使用该功能时,收到此错误。这是我的代码: 我已经安装了SQL Server 2016和SP1。还有什么我需要做的。这是我要使用的功能。弦乐 问题答案: 未在中引入。 在中引入。在您提供的MSDN链接中,提到了 此主题适用于:SQL Server(以vNext开头) 不是。我希望他们在将来的任何发行版中添加它,这是一个非常需要的功能 如

  • 问题内容: 在Python程序中,给定带有函数名称的字符串的最佳方法是什么。例如,假设我有一个模块,我有一个内容为的字符串。最好的通话方式是什么? 我需要获取函数的返回值,这就是为什么我不只是使用。我想出了如何通过使用eval定义一个返回该函数调用结果的函数来执行此操作的方法,但是我希望有一种更优雅的方法来执行此操作。 问题答案: 假设模块与方法: 你可以将第2行和第3行缩短为: 如果这对你的用例

  • 问题内容: 考虑以下jfiddle http://jsfiddle.net/bchapman26/9uUBU/29/ 我有2个模块(module1和module2)。module1和module2都定义了一个名为myService的服务。当两个模块都导入myApp时,这似乎在Angular中的myService上创建了名称冲突。看来AngularJs仅使用第二个服务定义,而没有警告您可能的问题。