Python导入X或从X导入Y? (性能)

我只是想知道 – 如果有一个图书馆,我至少要使用至少2种方法,在性能或ram使用之间有什么区别:
从X import method1,method2
和这个
导入X
我知道命名空间和东西,但我只是想知道python是否足够聪明,知道我将只使用2种方法。
有一个区别,因为在import x版本中有两个名称查找:一个用于模块名称,另一个用于函数名称;另一方面,从x导入y使用,只有一个查找。

你可以看到这个很好,使用dis模块:

import random
def f_1():
    random.seed()

dis.dis(f_1)
     0 LOAD_GLOBAL              0 (random)
     3 LOAD_ATTR                0 (seed)
     6 CALL_FUNCTION            0
     9 POP_TOP
    10 LOAD_CONST               0 (None)
    13 RETURN_VALUE

from random import seed

def f_2():
    seed()

dis.dis(f_2)
     0 LOAD_GLOBAL              0 (seed)
     3 CALL_FUNCTION            0
     6 POP_TOP
     7 LOAD_CONST               0 (None)
    10 RETURN_VALUE

正如你所看到的,使用x导入y中的表单要快一点。

另一方面,import x比x import y便宜,因为有一个名字查找较少;我们来看看反汇编的代码:

def f_3():
    import random

dis.dis(f_3)
     0 LOAD_CONST               1 (-1)
     3 LOAD_CONST               0 (None)
     6 IMPORT_NAME              0 (random)
     9 STORE_FAST               0 (random)
    12 LOAD_CONST               0 (None)
    15 RETURN_VALUE

def f_4():
    from random import seed

dis.dis(f_4)
     0 LOAD_CONST               1 (-1)
     3 LOAD_CONST               2 (('seed',))
     6 IMPORT_NAME              0 (random)
     9 IMPORT_FROM              1 (seed)
    12 STORE_FAST               0 (seed)
    15 POP_TOP
    16 LOAD_CONST               0 (None)
    19 RETURN_VALUE

我不知道原因,但是似乎从x import y的形式看起来像一个函数调用,因此比预期更昂贵;因此,如果导入的函数只使用一次,这意味着使用import x将会更快,而如果它被多次使用,则从x import y使用起来更快。

也就是说,像往常一样,我建议你不要按照这个知识来决定如何导入模块和功能,因为这只是一些过早的优化。
就个人而言,我认为在很多情况下,明确的命名空间可读性更高,我建议你做同样的事情:使用你自己的美感:-)

http://stackoverflow.com/questions/3591962/python-import-x-or-from-x-import-y-performance

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Python导入X或从X导入Y? (性能)