我可以在代码中间导入模块吗?

时间:2018-02-16 02:10:31

标签: python

我知道这个话题已经discussions了。我的情况可能有点'特别'。我的代码bar.py需要使用一个模块,比方说foobar.py的一般用法是这样的:

python bar.py --threads 3 --dir jjj

问题是加载foo需要很长时间(~40s),所以我想在加载之前检查参数的正确性。将import foo稍后放入代码而不是顶部是否有意义?

2 个答案:

答案 0 :(得分:5)

您可以从技术上导入模块,但请注意它将成为本地名称;如果在类或函数的中间导入,则它将仅在 范围内,而不是在全局(模块)范围内。

答案 1 :(得分:2)

是的,在Python中,您可以在Python文件中的任何位置导入模块。但是,范围很重要。例如,如果全局import foo,则模块全局可用,如下所示:

import foo

# you can use `foo` here

def main():
    # you can use `foo` here too

# ...

但是,如果您在类或函数内导入,则该模块仅在该范围内可用。例如:

def main():
    import foo

    # `foo` is available here (scope of `foo`)

    def validate_something():
        # `foo` is available here because `validate_something` has a child scope of the `main` function's scope

def parse_args():
    # `foo` is not available here (scope of `parse_args`)

# `foo` is also not available here (the global scope)

现在,在你的"特别" case,是的,在解析和验证参数之前延迟导入是理想的。在文件中间进口的唯一缺点是组织,但在有意义的情况下这是必要的权衡。