在 REPL 中,当您尝试使用代码“example = list('easyhoss')”,期望示例变量保存字符串中的字符列表,但遇到错误:“TypeError: 'list' object is不可调用”。
出现这种情况是因为您无意中用列表的实例覆盖了内置的 Python 类“list”。当您稍后在“example = list('easyhoss')”中引用“list”时,Python 将其解释为实例,无法调用该实例。
要理解这一点,我们必须探索 Python 的命名空间和作用域机制。
命名空间:Python 使用嵌套命名空间来存储对象名称(包括类和函数)。每个模块都有自己的命名空间,包括内置函数和类。
范围:引用名称时,Python 首先检查本地命名空间。如果没有找到,它会向上移动到更高级别的命名空间,直到找到名称或不再遇到任何命名空间(导致名称错误)。
在您的情况下,您在不知不觉中将“list”的实例分配给了全局“list”变量:
example = list('easyhoss') # "list" refers to the built-in class list = list('abc') # Creates a "list" variable referencing an instance of "list" example = list('easyhoss') # "list" refers to the instance, resulting in the error
此覆盖隐藏了内置“list”类,导致“TypeError。”
要避免此错误,请使用 PyCharm 或 Atom 等 IDE 以及突出显示名称隐藏的 Python 插件。
其他注意事项:
当您启动交互式 Python 会话时,您创建一个具有自己的命名空间的临时模块,这也会影响命名空间的行为。
以上是为什么 `example = list(...)` 有时会抛出 `TypeError: 'list' object is not callable`?的详细内容。更多信息请关注PHP中文网其他相关文章!