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完成: