Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 避免在导入的模块中导入模块_Python_Python 3.x - Fatal编程技术网

Python 避免在导入的模块中导入模块

Python 避免在导入的模块中导入模块,python,python-3.x,Python,Python 3.x,如果我有两个文件: file1.py,其中包含可在不同文件之间共享的函数: def log(x): return math.log(x) file2.py import file1 import math print(file1.log(math.e)) 但是,当我运行pythonfile2.py时,我得到以下错误:namererror:name'math'未定义。当导入模块已经导入模块时,是否有方法避免在导入模块中重新导入模块 或者,在导入的模块中重新导入模块是否会降低性能?我用m

如果我有两个文件:

file1.py,其中包含可在不同文件之间共享的函数:

def log(x):
    return math.log(x)
file2.py

import file1
import math
print(file1.log(math.e))
但是,当我运行
pythonfile2.py
时,我得到以下错误:
namererror:name'math'未定义
。当导入模块已经导入模块时,是否有方法避免在导入模块中重新导入模块


或者,在导入的模块中重新导入模块是否会降低性能?我用
math
来演示,但是我导入的模块实际上需要一些时间来导入(
nltk

我将回答你的最后一个问题。Python只在第一次导入时导入一次。它在内部缓存。之后,如果另一个模块导入同一个模块,则会快速从缓存中提取该模块。因此,多次导入不会影响性能


Python比你想象的更聪明。只需以显而易见的方式编写代码

我来回答你的最后一个问题。Python只在第一次导入时导入一次。它在内部缓存。之后,如果另一个模块导入同一个模块,则会快速从缓存中提取该模块。因此,多次导入不会影响性能


Python比你想象的更聪明。只需以显而易见的方式编写代码

不,没有别的办法。您必须在使用数学的模块中导入数学。为什么要在file2.py中导入数学,而在file1.py中使用数学?您可以从file2中删除导入数学并将其放入file1.py file1中的函数位于file1命名空间中,并且可以访问该命名空间中导入的模块。他们不能在不同的命名空间中使用模块,如file2命名空间。函数不能与导入的文件共享,但导入的文件可以共享函数。@VijayLingam如果我还需要在file2中使用数学模块怎么办?不,没有其他方法。您必须在使用数学的模块中导入数学。为什么要在file2.py中导入数学,而在file1.py中使用数学?您可以从file2中删除导入数学并将其放入file1.py file1中的函数位于file1命名空间中,并且可以访问该命名空间中导入的模块。他们不能在不同的名称空间中使用模块,如file2名称空间。函数不能与导入的文件共享,但导入的文件可以共享函数。@VijayLingam如果我还需要在file2中使用数学模块,该怎么办?您有相关的源代码吗?我没有理由不相信你,但我希望得到确认。@C.J.Jackson你有消息来源吗?我没有理由不相信你,但我宁愿得到确认。@C.J.Jackson