numba为Python提速

from time import time
from numba import jit
# from numba import autojit
# @autojit							#能对所有类型的参数进行运算

@jit								#即时编译,产生的函数只能对指定类型的参数进行运算
def foo():
	i = 0
	for a in range(200000000):
		i += 1

@jit                                #可同时使用多个@jit
def foo2():						   
	for a in range(200000000):
		continue

if __name__ == '__main__':
	start = time()
	foo()
	end = time()
	shi = end-start
	start2 = time()
	foo2()
	end2 = time()
	shi2 = end2-start2
	print("foo()总耗时:%s秒" % shi)
	print("foo2()总耗时:%s秒" % shi2)

注释掉@jit,foo()耗时17.66000986099243秒,foo2()耗时6.496371507644653秒;
启用@jit,foo()耗时0.04500269889831543秒,foo2()耗时0.041002511978149414秒;
foo()相差392倍,foo2()相差158倍;
@jit必须在要加速的函数上方(不能隔其他函数)才有效,可同时使用多个@jit。

注意下面的情况:

@jit								
def foo():
	x = []
	for a in range(10000000):
		x.append(a)

def foo2():	
	y = []					   
	for b in range(10000000):
		y.append(b)

if __name__ == '__main__':
	start = time()
	foo()
	end = time()
	shi = end - start
	start2 = time()
	foo2()
	end2 = time()
	shi2 = end2 - start2
	print("foo()总耗时:%s秒" % shi)
	print("foo2()总耗时:%s秒" % shi2)

当遍历100000次时:

foo()总耗时:0.11800670623779297秒
foo2()总耗时:0.011000633239746094秒

当遍历1000000次时:

foo()总耗时:0.1390078067779541秒
foo2()总耗时:0.1480085849761963秒

当遍历10000000次时:

foo()总耗时:0.5130293369293213秒
foo2()总耗时:1.4940855503082275秒

当遍历100000000次时:电脑崩溃了,内存占用太大。
综上:@jit适合数据量大时使用,数据量少时尽量不要使用。

你可能感兴趣的:(Python)