对Python程序的时间和空间性能进行优化

1.空间性能的优化(通用的,Java或者是C/C++等其他语言都可用)

  对空间性能的优化其实就是压缩空间,如果你创建的二维数组过大,并且对空间的利用率不高(好多都是空闲的),那就是造成空间的浪费了。

  如何避免这个问题呢?

  可以使用动态数组来解决,如下所示:

 1 #不使用库,手动创建一个数组
 2 dp=[]
 3 for i in range(1000):
 4     d=[]    
 5     for j in range(1000):
 6         d.append(0)
 7     dp.append(d)
 8 #每i行输入i个1,然后i+1行等于前i行的1的个数加1
 9 for i in range(1000):
10     for j in range(i+1):
11         if i==0:
12             dp[i][j]=1
13             break
14         dp[i][j]=dp[i-1][j]+1
15 #有此可知,使用上述的方法,虽能求出结果,但是空间消耗太大,尤其是i越小,空间浪费越多
16 #若使用动态数组,则是无需定义这么多,只需定义两行
17 dp=[]
18 for i in range(2):
19     d=[]
20     for j in range(1000):
21         d.append(0)
22     dp.append(d)
23 dp[0][0]=1
24 row=0
25 for i in range(1000):
26     row=1-row#使得数组滚动起来
27     for j in range(1000):
28         dp[row][j]=dp[1-row][j]+1
29 #这样一来,就能够大大的减少空间浪费

 2.时间性能的优化

  在编写python程序时,可以经过以下的几个方式,对时间性能进行优化:

  (1)使用局部变量,尽量避免使用全局变量(当数据量较大时,该方法能够优化将近11秒左右)

1 def demo():
2     global ans#全局变量
3     count=0#局部变量

   (2)尽量使用python的内置函数(当数据量较大时,该方法能够优化将近2秒左右)

1 #比如使用python的内置函数来对输入的字符串进行处理
2 n=list(map(int,input().split()))
3 print(n)

    (3)尽量使用a,b=1,2这种类型进行赋值(当数据量较大时,该方法能够优化将近1秒左右)

  (4)如果上述的方法还是不能够很好的解决的话,可以利用python“胶水语言”的特性,进行跨平台使用,比如在python程序中去调用Java或者是C/C++语言(这种方法可以大大的缩减运行时间)

 1 #这里以调用Java语言为例
 2 #首先需要你先前去安装jpype的第三方库
 3 import jpype
 4 n=list(map(int,input().split()))
 5 jarpath=os.path.join(os.path.abspath("."),r"D:\hr.jar")#打开jar文件
 6 jvmpath=jpype.get_default_jvm_path()#获取jvm.dll的文件路径
 7 jpype.startJVM(jvmpath,"-ea","-Djava.class.path=%s" % jarpath)#打开jvm
 8 javaclass=jpype.JClass("com.java.python.JavaPython")#加载java类(参数是java的长类名)
 9 print(javaclass.main(n[0],n[1],n[2],n[3]))#调用Java类中的方法(静态方法可直接用类名调用)
10 jpype.shutdownJVM()#关闭jvm

  上述这个例子是我自己之前编写的,调用Java程序的具体步骤如上述的例子所示,如果想要具体了解的,可以查看下面这个链接:

         https://www.cnblogs.com/jasmine-Jobs/p/10014643.html

3.在python中,单层for循环的循环次数小于等于7*10^6时,运行时间差不多就在1秒内

1 import time
2 a=[]
3 start=time.time()
4 for i in range(7000000):
5     a.append(i)
6 print(time.time()-start)

运行结果为:

猜你喜欢

转载自www.cnblogs.com/wangjiong/p/12806461.html
今日推荐