【问题标题】:Python: Is there a place when I can put default imports for all my modules?Python:有没有地方可以为我的所有模块添加默认导入?
【发布时间】:2009-08-29 08:52:21
【问题描述】:

我是否可以为所有模块设置默认导入?

【问题讨论】:

  • 您不需要默认导入。您希望导入是明确的,以便您知道正在导入什么。否则,您最终会遇到难以找到的命名空间冲突。
  • @Lennart:不是真的,如果他所有的导入都是import module 而不是from module import names。但是使用显式导入仍然更好——主要原因是这有助于拆分程序的不同部分。我正在尝试在下面详细说明我的答案。
  • @LennartRegebro 您如何看待 ilya n 的回答以及他提出的概念的名称(我想找到有关此主题的更多问题)?
  • @PiotrDobrogost:他提出的概念与我的基本相同。 “不要这样做”。带有 * 导入的显式默认导入是个坏主意。

标签: python


【解决方案1】:

如果您在使用 python shell 时需要默认导入,您还可以设置 PYTHONSTARTUP 环境变量以指向一个 python 文件,该文件将在您启动 shell 时执行。将所有默认导入放入此文件中。

【讨论】:

    【解决方案2】:

    是的,只需创建一个单独的模块并将其导入您的模块即可。

    例子:

    # my_imports.py
    '''Here go all of my imports'''
    import sys
    import functools
    from contextlib import contextmanager  # This is a long name, no chance to confuse it.
    ....
    
    
    # something1.py
    '''One of my project files.'''
    from my_imports import * 
    ....
    
    # something2.py
    '''Another project file.'''
    from my_imports import * 
    ....
    

    请注意,根据标准指南,应避免使用from module import *。如果您正在管理一个包含多个需要共同导入的文件的小型项目,我认为您可以使用 from module import *,但它仍然是重构代码的更好主意,以便不同文件需要不同的导入。

    所以这样做:

    # something1.py
    '''One of my project files. Takes care of main cycle.'''
    import sys
    ....
    
    # something2.py
    '''Another project file. Main program logic.'''
    import functools
    from contextlib import contextmanager  # This is a long name, no chance to confuse it.
    ....
    

    【讨论】:

    • 是的,只需创建一个单独的模块并将其导入您的模块。它不适用于从__future__ 导入
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    • 2019-09-16
    • 2021-12-22
    • 2019-12-29
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    相关资源
    最近更新 更多