Python中的Bug';s文档?

Python中的Bug';s文档?,python,import,module,Python,Import,Module,我正在阅读,不知道以下内容是否正确: 模块可以导入其他模块。这是惯例,但不要求 将所有导入语句放在模块(或脚本)的开头, 就此而言)导入的模块名称放置在 正在导入模块的全局符号表。 显然不是: >>> def foo(): import sys ... >>> foo() >>> sys.path Traceback (most recent call last): File "<stdin>", line 1, in &l

我正在阅读,不知道以下内容是否正确:

模块可以导入其他模块。这是惯例,但不要求 将所有导入语句放在模块(或脚本)的开头, 就此而言)导入的模块名称放置在 正在导入模块的全局符号表。

显然不是:

>>> def foo(): import sys
... 
>>> foo()
>>> sys.path
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'sys' is not defined
def foo():导入系统 ... >>>foo() >>>系统路径 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 NameError:未定义名称“sys” 有关在线演示,请参阅


那么,这是Python文档中的一个bug还是我不明白什么?

是的,这是一个文档错误。
import
语句将名称导入当前命名空间。通常,
import
在函数和类之外使用,但正如您所发现的,它确实在函数和类内部工作。在您的示例函数中,当调用函数时,模块被导入到函数的本地命名空间中。(您没有这样做,但这不会使它在函数之外可用。)

global
关键字在这里确实有效,但是:

def foo():
    global sys
    import sys

foo()
sys.path

我不认为这实际上是文档中的错误,但更多的是错误的解释。您只是有一个范围问题。您正在函数foo()的作用域中导入它。您当然可以按照文档的建议,将导入放在文件的底部或文件中的其他地方,这些地方仍然与您的模块具有相同的全局范围。问题是“导入的模块名称被放置在导入模块的全局符号表中”,其中您要导入的模块的作用域包含在函数foo()中,而不是在模块的全局级别。

您可以在上报告此情况。@AshwiniChaudhary完成: