嵌套 Python 模块导入的最佳实践
Best practice for nested Python module imports
假设我有一个 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
是多余的,可以省略。
这种情况下的最佳做法是什么:
- 从 "main.py" 中省略
import math
因为它是多余的?或者,
- 在 "main.py" 中保留
import math
以阐明该模块中的代码需要它?
在main.py
中对math.cos
的引用意味着import math
在main.py
中是必需的,无论my_own_module.py
是否导入它。它不是多余的,也不能省略(如果你试图省略它,你会得到一个错误)。
这不像 C++ 中的 #include
。导入 不是 可选。导入模块需要能够引用其内容。对于执行此操作的每个文件都是如此。
import math
做一些事情 else 而不是简单地 将一个文件的全文包含到另一个文件中 。
它引入了一个名为 math
的新 命名空间 ,并且这个 math
名称将在您的 当前命名空间中为人所知。
如果省略
import math
从您的 main.py
文件,您的命令
foo = math.cos(bar)
变为 非法 ,因为 math
符号在 main.py
命名空间中不会(被识别)。
好问题。简短的回答是肯定的,如果你在 py 文件中使用数学函数,那么你需要在顶部导入模块,不管它在其他地方导入了多少次。
当我们将第三个文件放入混音时会变得有趣,让我们称之为 "explanation.py"
并假设您的 "main.py" 变为 "my_functions.py" 并包含一个名为 foo:
的函数
#my_functions.py
import math
import my_own_module
def foo(bar):
return math.cos(bar)
并在 my_own_module.py 中:
#my_own_module.py
import math
def bar(foo):
return math.sin(foo)
最后 explanation.py (new main())
#main.py
import my_functions
import my_own_module
bar = my_functions.foo(10)
foo = my_own_module.bar(10)
print(foo)
print(bar)
请注意,如果您调用从另一个文件导入的函数,则无需添加数学运算。我希望这可以使您的查询更加清晰:)
然而,可能值得注意的是,这会将数学从当前命名空间中排除,因此导致对数学函数的任何进一步调用都无用。
假设我有一个 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
是多余的,可以省略。
这种情况下的最佳做法是什么:
- 从 "main.py" 中省略
import math
因为它是多余的?或者, - 在 "main.py" 中保留
import math
以阐明该模块中的代码需要它?
在main.py
中对math.cos
的引用意味着import math
在main.py
中是必需的,无论my_own_module.py
是否导入它。它不是多余的,也不能省略(如果你试图省略它,你会得到一个错误)。
这不像 C++ 中的 #include
。导入 不是 可选。导入模块需要能够引用其内容。对于执行此操作的每个文件都是如此。
import math
做一些事情 else 而不是简单地 将一个文件的全文包含到另一个文件中 。
它引入了一个名为 math
的新 命名空间 ,并且这个 math
名称将在您的 当前命名空间中为人所知。
如果省略
import math
从您的 main.py
文件,您的命令
foo = math.cos(bar)
变为 非法 ,因为 math
符号在 main.py
命名空间中不会(被识别)。
好问题。简短的回答是肯定的,如果你在 py 文件中使用数学函数,那么你需要在顶部导入模块,不管它在其他地方导入了多少次。
当我们将第三个文件放入混音时会变得有趣,让我们称之为 "explanation.py"
并假设您的 "main.py" 变为 "my_functions.py" 并包含一个名为 foo:
的函数#my_functions.py
import math
import my_own_module
def foo(bar):
return math.cos(bar)
并在 my_own_module.py 中:
#my_own_module.py
import math
def bar(foo):
return math.sin(foo)
最后 explanation.py (new main())
#main.py
import my_functions
import my_own_module
bar = my_functions.foo(10)
foo = my_own_module.bar(10)
print(foo)
print(bar)
请注意,如果您调用从另一个文件导入的函数,则无需添加数学运算。我希望这可以使您的查询更加清晰:)
然而,可能值得注意的是,这会将数学从当前命名空间中排除,因此导致对数学函数的任何进一步调用都无用。