假设我有一个Python模块“ main.py”:
import math # from the standard Python library
import my_own_module
...
foo = math.cos(bar)
我还需要在“ my_own_module.py”中导入标准数学模块:
import math
...
baz = math.sin(qux)
在这种情况下,我认为“ main.py”中的import math
是多余的,可以省略。
在这种情况下的最佳做法是:
import math
,因为它是多余的吗?或者,import math
来说明该模块中的代码是否需要它?答案 0 :(得分:5)
在math.cos
中对main.py
的引用意味着import math
中main.py
是必需的,而不管my_own_module.py
是否导入它。它不是多余的,并且不能省略(如果您尝试将其忽略,则会出现错误)。
答案 1 :(得分:3)
import math
除了简单地将一个文件的全文包含到另一个文件中之外,还可以执行其他操作。
它引入了一个名为math
的新命名空间,并且该math
名称在您的当前命名空间中是已知的。
如果省略
import math
从您的main.py
文件中输入命令
foo = math.cos(bar)
变为非法,因为math
名称空间中的main.py
符号不会(被识别)。
答案 2 :(得分:1)
这与C ++中的#include
类似。导入不是可选。导入模块需要能够引用其内容。对于执行此操作的每个文件都是如此。
答案 3 :(得分:0)
一个好问题。简短的答案是肯定的,如果您在py文件中使用数学函数,则无论模块在其他位置导入多少次,都需要在顶部导入模块。
当我们将一个普通文件放入混音中时,它变得很有趣,我们称其为“ explanation.py”
并假设您的“ main.py”变为“ my_functions.py”并包含一个名为foo的函数:
Editor
,并在my_own_module.py中:
#my_functions.py
import math
import my_own_module
def foo(bar):
return math.cos(bar)
最后是exploration.py(新的main())
#my_own_module.py
import math
def bar(foo):
return math.sin(foo)
请注意,如果您调用从另一个文件导入的函数,则无需添加数学。我希望这可以使您的询问更加清晰:)
但是,值得注意的是,这会将数学从当前名称空间中排除,因此使对数学函数的任何进一步调用都变得无用。