运行效率
(1)针对循环的优化
每次你调用str.upper, Python都会计算这个式子的值。然而,如果你把这个求值赋值给一个变量,那么求值的结果就能提前知道,Python程序就能运行得更快。
因此,关键就是尽可能减小Python在循环中的工作量。因为Python解释执行的特性,在上面的例子中会大大减慢它的速度。
lowerlist=['this','is','lowercase'] upperlist=[] for word in lowerlist: upperlist.append(str.upper(word)) print(upperlist) print("********优化后************") lowerlist=['this','is','lowercase'] upperlist=[] upper=str.upper append=upperlist.append for word in lowerlist: append(upper(word)) print(upperlist)
for i in range(100): myLib.findMe(i) print("****优化后 **********") fimdMe=myLib.findMe for i in range(100): fimdMe(i)
(2)尝试多种编码方法
当一开始myDict为空时,这段代码会跑得比较快。然而,通常情况下,myDict填满了数据,至少填有大部分数据,这时换另一种方法会更有效率。
n=16 myDict={} for i in range(0,n): char='abcd'[i%4] if char not in myDict: myDict[char]=0 myDict[char]+=1 print(myDict) print("*****优化后***********") n=16 myDict={} for i in range(0,n): char='abcd'[i%4] try: myDict[char]+=1 except KeyError: myDict[char]=1 print(myDict)
(3) 有选择性的消除属性访问。
如多用from math import sqrt 而不要直接在程序中多次调用 math.sqrt(),或直接声明局部变量。
import math def compute_roots(nums): sqrt=math.sqrt res = [] res_append = res.append for n in nums: res_append(sqrt(n)) return res print("****优化后 **********") from math import sqrt def compute_roots(nums): res = [] res_append = res.append for n in nums: res_append(sqrt(n)) return res
(4)用If语句进行优化。
user = 'Tamir' passwd = 'Tamir123' username = input("username:") password = input("password:") if user == username: if password == passwd: print("Welcome login...") else: print("password is invalid....") else: print("password is invalid....") print("*************优化后*************") if user == username and password == passwd: print("Welcome login...") else: print("password is invalid....")
(5)在排序时使用键
dict_data={6:9,10:5,3:11,8:2,7:6}
#方式一
test0=sorted(dict_data.keys())
print(test0)
test1=sorted(dict_data.items(),key=lambda x:x[0])
print(test1)
test2=sorted(dict_data.items(),key=lambda x:x[1])
print(test2)
#方式二
import operator
test3=sorted(dict_data.items(),key=operator.itemgetter(0))
print(test3)
test4=sorted(dict_data.items(),key=operator.itemgetter(1))
print(test4)
posted on 2020-11-18 15:34 happygril3 阅读(373) 评论(0) 收藏 举报
浙公网安备 33010602011771号