加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

了解学会Python 代码优化原则

发布时间:2021-05-28 08:42:14 所属栏目:编程 来源:互联网
导读:本文会先容不少的 Python 代码加快运行的能力。在深入代码优化细节之前,必要相识一些代码优化根基原则。 第一个根基原则是不要过早优化。许多人一开始写代码就

第一个根基原则是不要过早优化。许多人一开始写代码就奔着机能优化的方针,“让正确的措施更将近比让快速的措施正确轻易得多”。因此,优化的条件是代码能正常事变。过早地举办优化也许会忽视对总体机能指标的掌握,在获得全局功效前不要主次颠倒。

第二个根基原则是衡量优化的价钱。优化是有价钱的,想办理全部机能的题目是险些不行能的。凡是面对的选择是时刻换空间或空间换时刻。其它,开拓价钱也必要思量。

第三个原则是不要优化那些无关紧急的部门。假如对代码的每一部门都去优化,这些修改会使代码难以阅读和领略。假如你的代码运行速率很慢,起主要找到代码运行慢的位置,凡是是内部轮回,专注于运行慢的处所举办优化。在其他处所,一点时刻上的丧失没有什么影响。

1. 停止全局变量 

# 不保举写法。代码耗时:26.8秒  

import math  

size = 10000  

for x in range(size):  

    for y in range(size):  

        z = math.sqrt(x) + math.sqrt(y) 

很多措施员刚开始会用 Python 说话写一些简朴的剧本,当编写剧本时,凡是风俗了直接将其写为全局变量,譬喻上面的代码。可是,因为全局变量和局部变量实现方法差异,界说在全局范畴内的代码运行速率会比界说在函数中的慢不少。通过将剧本语句放入到函数中,凡是可带来 15% - 30% 的速率晋升。

# 保举写法。代码耗时:20.6秒  

import math  

def main():  # 界说到函数中,以镌汰所有变量行使  

    size = 10000  

    for x in range(size):  

        for y in range(size):  

            z = math.sqrt(x) + math.sqrt(y)  

main() 

2. 停止.

2.1 停止模块和函数属性会见

# 不保举写法。代码耗时:14.5秒  

import math  

def computeSqrt(size: int):  

    result = []  

    for i in range(size):  

        result.append(math.sqrt(i))  

    return result  

def main(): 

     size = 10000  

    for _ in range(size):  

        result = computeSqrt(size)  

main() 

每次行使.(属性会见操纵符时)会触发特定的要领,如__getattribute__()和__getattr__(),这些要了解举办字典操纵,因此会带来特另外时刻开销。通过from import语句,可以消除属性会见。

# 第一次优化写法。代码耗时:10.9秒  

from math import sqrt  

def computeSqrt(size: int):  

    result = []  

    for i in range(size):  

        result.append(sqrt(i))  # 停止math.sqrt的行使  

    return result  

def main():  

    size = 10000  

    for _ in range(size):  

        result = computeSqrt(size)  

main() 

在第 1 节中我们讲到,局部变量的查找会比全局变量更快,因此对付频仍会见的变量sqrt,通过将其改为局部变量可以加快运行。

# 第二次优化写法。代码耗时:9.9秒  

import math  

def computeSqrt(size: int):  

    result = []  

    sqrt = math.sqrt  # 赋值给局部变量 

     for i in range(size):  

        result.append(sqrt(i))  # 停止math.sqrt的行使  

    return result 

 def main():  

    size = 10000  

    for _ in range(size):  

        result = computeSqrt(size)  

main() 

除了math.sqrt外,computeSqrt函数中尚有.的存在,那就是挪用list的append要领。通过将该要领赋值给一个局部变量,可以彻底消除computeSqrt函数中for轮回内部的.行使。

# 保举写法。代码耗时:7.9秒  

import math  

def computeSqrt(size: int):  

    result = []  

    append = result.append  

    sqrt = math.sqrt    # 赋值给局部变量  

    for i in range(size):  

        append(sqrt(i))  # 停止 result.append 和 math.sqrt 的行使  

    return result  

def main():  

    size = 10000  

    for _ in range(size):  

        result = computeSqrt(size)  

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读