python导入和作用域

python导入和作用域,python,import,Python,Import,假设我们有两个文件“a.py”和“b.py” a.py from b import funcB funcB() varB = 123 def funcB(): print(varB) b.py from b import funcB funcB() varB = 123 def funcB(): print(varB) 正如您在“a.py”中看到的,我只从“b”导入“funcB”, 之后,我在“a”中执行“funcB”,但有些“funcB”是如何执行的 可以看到“

假设我们有两个文件“a.py”和“b.py”

a.py

from b import funcB

funcB()
varB = 123

def funcB():
    print(varB)
b.py

from b import funcB

funcB()
varB = 123

def funcB():
    print(varB)
正如您在“a.py”中看到的,我只从“b”导入“funcB”, 之后,我在“a”中执行“funcB”,但有些“funcB”是如何执行的 可以看到“b”中定义的“varB”。但我只进口了 “funcB”。我以为“从b导入funcB”只会导入“funcB” 没有别的了

为什么“funcB”可以访问“varB”?这是某种设计决策吗


谢谢

当您导入模块时,它不仅可以让您访问刚刚导入的内容。它还将执行整个脚本

这就是为什么您可以在许多脚本中看到

if __name__ == '__main__':
    some code
否则,导入时将执行一些代码。因此,模块的所有功能都被声明,所有“功能外”代码都被执行。这是逻辑,否则,函数永远不能使用参数中没有给它的东西,甚至不能使用其他函数。

“这是某种设计决策吗?”是的。整个模块实际上已导入,但只有指定的名称添加到当前名称空间中。否则,您导入的函数将无法访问其源脚本中定义的帮助函数和导入,这将非常没有帮助。相关:这也很有用: