gpt4 book ai didi

python - 为什么 Python 看不到以前导入的模块?

转载 作者:行者123 更新时间:2023-12-03 18:54:15 24 4
gpt4 key购买 nike

假设有两个文件a.pyb.py .它们里面有以下内容:

# a.py
from b import foo

foo()

# b.py
import os

def foo():
print(os.cwd())
这工作得很好,但为什么 a.py无法看到 b.py 的导入隐含地供自己使用:
# a.py
import b

def bar():
print(os.cpu_count()) # fails

b.foo()
bar()

# b.py
import os

def foo():
print(os.cwd())
我正在阅读 import system docs,但无法弄清楚这一点。 os import 存在于 b.py 的命名空间中但它不适用于 a.py我不确定为什么。 globals()方法是在模块级别,所以给定 rules ,模块之间是否没有共享导入(不使用 __all__* 导入)?每个模块都有自己的导入命名空间吗?

最佳答案

每个模块都有其命名空间。
import 语句做了两件事:如果一个模块在当前进程中还没有被导入,它就会被加载并执行。之后,它的名称将绑定(bind)到 import 语句所在的本地命名空间。
如果一个模块已经在同一个进程中被导入,它不会被重新加载,但导入语句中的名称被导入语句正确绑定(bind)。
正确的做法是添加另一个import os在您的 a 上模块 -
但如果你这样做 import b您可以使用 b.os.cwd() (因为“os”是模块b执行后的绑定(bind)名称)

关于python - 为什么 Python 看不到以前导入的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66281112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com