首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果模块在任何时候都不需要,那么导入模块的最佳方法是什么?

如果模块在任何时候都不需要,那么导入模块的最佳方法是什么?
EN

Stack Overflow用户
提问于 2013-08-14 07:38:18
回答 3查看 106关注 0票数 1

如果模块在任何时候都不需要,那么导入模块的最佳方法是什么?

是在没有条件的情况下导入文件头中的模块,还是使用条件导入该模块?

导入是否会在导入的头上减慢应用程序?

例如:

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from app.settings import CONDITION
from foo.bar import myClass

if CONDITION:
    # ... do some action with myClass

或者:

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from app.settings import CONDITION

if CONDITION:
    from foo.bar import myClass
    # ... do some action with myClass
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-14 07:40:57

根据PEP 8,您应该将所有导入语句放在文件的顶部,我同意这一点,即使您只打算在一个函数中使用它一次。

如果导入语句分散在代码中,代码可能会有些不可读。

至于进口是否会减慢您的脚本:可能吧。但你应该担心的并不是很多。

票数 3
EN

Stack Overflow用户

发布于 2013-08-14 07:51:18

在导入的头上,无论导入花费多少毫秒,在启动程序时都是如此。当某个条件处于活动状态时,这比使程序停止导入更好。

同时,在顶部导入代码也是很干净的。

票数 1
EN

Stack Overflow用户

发布于 2013-08-14 07:52:26

如果您只是偶尔需要模块,那么您的第二种导入方式可能会更好。特别是当模块完成一些繁重的初始化工作时。

import所做的是调用内置函数__import__(name),参见详细信息

代码语言:javascript
复制
if True:
    import os

相当于:

代码语言:javascript
复制
if True:
    os = __import__('os')

最好的部分是缓存了__import__的结果,因此您不需要担心多次调用它会导致对模块进行多次解析。

编辑:其他答案确实有好的地方,让它在上面更干净,如果条件被评估为True,那么您迟早会付出代价。

我想这也取决于您的特定用例。例如,通常情况下,我们希望选择特定模块的实现之一,我们这样做:

代码语言:javascript
复制
try:
    import simplejson as json
except ImportError:
    import json
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18225805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档