如果模块在任何时候都不需要,那么导入模块的最佳方法是什么?
是在没有条件的情况下导入文件头中的模块,还是使用条件导入该模块?
导入是否会在导入的头上减慢应用程序?
例如:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from app.settings import CONDITION
from foo.bar import myClass
if CONDITION:
# ... do some action with myClass或者:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from app.settings import CONDITION
if CONDITION:
from foo.bar import myClass
# ... do some action with myClass发布于 2013-08-14 07:40:57
根据PEP 8,您应该将所有导入语句放在文件的顶部,我同意这一点,即使您只打算在一个函数中使用它一次。
如果导入语句分散在代码中,代码可能会有些不可读。
至于进口是否会减慢您的脚本:可能吧。但你应该担心的并不是很多。
发布于 2013-08-14 07:51:18
在导入的头上,无论导入花费多少毫秒,在启动程序时都是如此。当某个条件处于活动状态时,这比使程序停止导入更好。
同时,在顶部导入代码也是很干净的。
发布于 2013-08-14 07:52:26
如果您只是偶尔需要模块,那么您的第二种导入方式可能会更好。特别是当模块完成一些繁重的初始化工作时。
import所做的是调用内置函数__import__(name),参见详细信息。
if True:
import os相当于:
if True:
os = __import__('os')最好的部分是缓存了__import__的结果,因此您不需要担心多次调用它会导致对模块进行多次解析。
编辑:其他答案确实有好的地方,让它在上面更干净,如果条件被评估为True,那么您迟早会付出代价。
我想这也取决于您的特定用例。例如,通常情况下,我们希望选择特定模块的实现之一,我们这样做:
try:
import simplejson as json
except ImportError:
import jsonhttps://stackoverflow.com/questions/18225805
复制相似问题