我只是想知道 – 如果有一个图书馆,我至少要使用至少2种方法,在性能或ram使用之间有什么区别:
从X import method1,method2
和这个
导入X
我知道命名空间和东西,但我只是想知道python是否足够聪明,知道我将只使用2种方法。
从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? (性能)