将所有导入放在顶部更“Pythonic”,还是按需导入?
可能重复的问题:
在Python中:在文件中间导入是好习惯还是坏习惯
我习惯使用像Java这样的语言,在这些语言中,所有的import
语句必须放在类或文件的最上面。
在Python中,哪种方式更“优雅”呢?是把所有的导入语句放在最上面,还是根据需要随时导入?
1 个回答
10
这要看情况。
大多数时候,你会想把导入放在文件的最上面。这并不是因为PEP-8(如果有人单纯引用PEP-8作为理由,那就是误解了设计的初衷),而是因为PEP-8推荐的背后有一些实际原因:
如果你把导入放在函数里面,而这些导入又不可用,可能会隐藏一些问题。也就是说,当你导入模块时不会立即报错,而是等到某个函数被调用时才会出问题。而且这样做效率也稍微低一些,因为每次调用函数时才去加载名字,不过这通常影响不大。
不过,这并不是一个硬性规定。在某些情况下,你可能想根据需要导入,比如在特定功能检测时。例如,
def decode(s):
try:
import cjson
return cjson.decode(s)
except ImportError:
import simplejson
return simplejson.loads(s)
print decode('[1,2,3]')
或者类似的,
try:
import cjson
def decode(s):
return cjson.decode(s)
except ImportError:
import simplejson
def decode(s):
return simplejson.loads(s)
print decode('[1,2,3]')
你可能还希望只有在某个模块可用时才支持特定的方法调用,而不想让整个模块都依赖于它。