我知道这个话题已经discussions了。我的情况可能有点'特别'。我的代码bar.py
需要使用一个模块,比方说foo
。 bar.py
的一般用法是这样的:
python bar.py --threads 3 --dir jjj
问题是加载foo
需要很长时间(~40s),所以我想在加载之前检查参数的正确性。将import foo
稍后放入代码而不是顶部是否有意义?
答案 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,是的,在解析和验证参数之前延迟导入是理想的。在文件中间进口的唯一缺点是组织,但在有意义的情况下这是必要的权衡。