-1


基本上,我想知道在每个模块中导入标准库是否比在一个模块中导入一次标准模块并在其他模块中重用它更好/更差。换句话说,我想知道以下两个代码之间是否存在速度/性能差异:

"""
One way - Just importing time module only once
"""
# /usr/bin/python
# mytime.py
import time

def get_time():
    return time.time()


# /usr/bin/python
# usingtime.py
import mytime

print (mytime.time() - mytime.time.time())



"""
Another way - importing time module as needed
"""
# /usr/bin/python
# mytime.py
import time

def get_time():
    return time.time()


# /usr/bin/python
# usingtime.py
import time
import mytime

print (mytime.time() - time.time())

哪个代码更好?还是真的很重要?

4

2 回答 2

2

在第二个示例中没有理由重新导入time,这实际上就是您正在做的事情。为了优雅起见,您应该只在(直接)使用它的同一模块中导入一个模块。

想象一下导入 3 级深度(一个模块导入另一个模块,该模块导入另一个模块......)并在第一个顶级模块中跟踪所有这些导入!维持这将是一场噩梦。

就速度而言,我相信重新导入对性能的影响可以忽略不计。多次导入时,Python 解释器不会进行完全重新导入。

于 2012-08-01T17:34:30.237 回答
1

来自:http ://docs.python.org/reference/simple_stmts.html#the-import-statement

检查的第一个地方是 sys.modules,之前已导入的所有模块的缓存。如果在那里找到模块,则在导入的步骤 (2) 中使用它。

通过导入加载的模块本质上是单例。在模块的第一次导入时,模块全局范围内的代码将被执行(模块的初始化)并且模块实例被添加到 sys.modules。任何其他模块中的下一个导入将仅引用此初始化实例。成本可以忽略不计。

简单的例子:

一个.py

print "HELLO"

b.py

import a
import c

py

import a

在交互式解释器中:

Python 2.6.6 (r266:84297, Aug 24 2010, 18:13:38) [MSC v.1500 64 bit (AMD64)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import b
HELLO
>>>

(注意“HELLO”只打印一次)

于 2012-08-01T18:03:23.537 回答