我有一个名为main_plotter.py
的脚本,如下所示:
import re
import numbs
numbs.getSquares("file.csv")
numbs.py
是我从中导入的文件。看起来像这样:
def getSquares(sqfile):
infile=sqfile
base_name = re.split(".csv", infile)[0]
print (base_name)
运行main_plotter.py时,我得到NameError: name 're' is not defined
。
为什么会这样?我尝试在global re
语句之前添加import re
,但这也无济于事。导入语句不是应该是全局的吗?任何帮助表示赞赏!
PS。如果将re
导入numbs.py
文件中,则代码将按预期运行。
答案 0 :(得分:3)
Python中的“全局”表示“模块名称空间”。任何import re
都恰好发生在这里-一个模块一个模块;有意地不存在任何更广泛的范围,这确保了可以通过仅读取该模块来理解任何Python模块的内容(与Ruby不同,在Ruby中,要了解运行代码的上下文,您需要读取曾经加载的每个模块由同一个口译员提供。
如果要使用re
中的numbs.py
模块,则在该文件中应该有一个单独的import re
。 不会从磁盘重新加载模块,而只是添加一个命名空间条目,该条目指向第一次引用时已加载的已缓存实例。