我应该在 Python 中有一个单独的导入文件吗?什么是最佳实践?

Should I have a separate imports file in Python? What is best practice?

main.py:
import sys
import os
import datetime
import numpy
from util import *

util.py:
import sys
import os
import logging
  1. 在main.py中是否需要“import sys”和“import os”?

  2. 如果我在 main.py 和 util.py 中有“import sys”和“import os”,脚本会加载模块两次吗?

如果我创建一个单独的 myimports.py 文件,其中包含两个文件的所有导入,并在 main.py 和 util.py 中指定:

from myimports import *
  1. 是否每个文件都必须导入它不需要的模块?

  2. 我应该只保留各自的导入,而不是使用单独的 myimports.py 文件吗?

  3. 如果我只需要来自 sys 的路径,如果我使用脚本加载速度会更快还是占用内存更少:

    从 sys 导入路径 # ?

以下内容可能对您有用。抱歉,我无法回答你所有的问题。

我做了这个python文件目录。

python_files
            \main.py
            \my_imports.py

在my_imports.py

# module to get current time    
from datetime import datetime

current_time = datetime.now()

在main.py

# import my_imports file from the same directory    
import my_imports as my_imports 

# use my_imports local name to access current_time and then format it. 
current_time = my_imports.current_time.strftime("%H:%M:%S")

# now print to console
print("Current Time =", current_time)

现在在 运行 main.py 中,它会将当前时间打印到控制台。希望这个技巧能为您解决。

  1. 很难回答,取决于它是否用于 main.py 代码

  2. 否,python 导入系统缓存评估模块。导入后,任何请求相同模块的导入语句都将从全局注册表中return它。这有起有落

  3. 如果我没理解错的话——这通常是一种不好的做法(在编写库或迁移具有复杂向后兼容性的代码时有一些例外)。您应该将每个模块中的导入视为此模块依赖项的提示——就像函数中的参数一样。它们更清晰、更明确——阅读和理解您的代码会更容易。这是您应该首先考虑的主要(如果不是唯一)考虑因素

  4. 在使用导入功能的模块中保留导入。导入包装器是一个很奇怪的想法——它可能在极少数情况下会有一些用处,但在正常的 day-to-day 开发中它会减少 true code quality

  5. 没有区别,一旦你在任何地方从 sys(或任何其他模块)请求任何东西,整个 sys 将被评估并放入模块注册表。但通常显式导入确实是一件好事——from sys import path 暗示你的模块依赖于 Pathimport sys 之类的东西传达“我严重依赖 sys 模块,因此一次导入所有内容更容易”。在第一种情况下,reader 期待摆弄 PYTHONPATH 的典型工作,在后一种情况下 – 硬编码 system-level“元编程”。

    Side-effect – 因为模块是作为一个整体导入和缓存的,导入完成后,任何其他模块中 sys 的导入都会很快(直到请求强制重新加载或注册表手动更改)