Python小tips

来源:互联网 发布:找最大值 java 方法 编辑:程序博客网 时间:2024/05/29 06:58

1.  同时访问序列的索引和索引对应的值
Problem:
    你需要迭代一个序列,但同时你想知道每一步迭代到了序列的哪个位置。
Solution:
    for index, item in enumerate(sequence):
        if item > 23:
            sequence[index] = transform(item)

    这种方法要比下面这种使用索引来访问序列值的方法更清晰,可读性更强,并且更快:
    for index in range(len(sequence)):
        if sequence[index] > 23:
            sequence[index] = transform(sequence[index])
   
2.  如果序列太大,考虑使用生成器表达式而不是列表解析。从而避免了在内存中构造一个大的列表,更节省内存更快。

3.  如何让你的python程序跑得更快?
    把程序编译成C的扩展或x86汇编语言或者直接改写成C固然是一个好主意,但开始可以先从你的Python代码找原因。切记,优化往往意味着代码可读性和清晰度的降低,并且增加了开发时间和出现bug的几率,所以优化前请认真权衡成本和收益。Python的标准模块"profile"能够找出你的程序中哪些部分最耗时间,从而着重优化这些部分。根据Python语言的特性,你可以通过以下几点让你的程序更快点。
   
    (1) 函数和方法调用的代价很高。所以访问和设置一个实例的变量不需要get/set方法,直接访问要更划算。
    (2) 进行字符串连接时,如果用以连接的每个子串很长(10K+),join()要比"+"快,因为"+"会计算很多的子表达式,而join()能够在一遍中完成。当然也可以考虑字符串格式化("%")。
    (3) 要循环调用一个函数可以考虑把循环放在函数体内。
    (4) sort()虽然没有sorted()方便,但因为前者是在原地修改一个列表,所以比sorted()效率更高。

原创粉丝点击