您可以改善Python的功能吗?

时间:2019-05-25 16:40:01

标签: python

一段时间以来,我一直在思考Python中的几个函数,并且能够定义替换其职责的函数。我的问题是,默认功能是效率最高的,还是我应该尝试构建效率更高的功能?

例如,我已经重做list.reverse()

def reverse(lst):
    for i in range(len(lst) - 1, -1, -1):
        lst.append(lst.pop(i))

此方法有效。该列表已排序。但这在效率或使用的内存方面比list.reverse()好吗?

2 个答案:

答案 0 :(得分:4)

定时-您的速度慢了一个数量级:

import time

def reverse(lst):
    for i in range(len(lst) - 1, -1, -1):
        lst.append(lst.pop(i))

thelist = ["Hello World","Something","Element"]

start = time.time()
for x in range(0,1000000):
    reverse(thelist)
print(time.time()-start)

start = time.time()
for x in range(0,1000000):
    thelist.reverse()
print(time.time()-start)

输出:

1.0335352420806885
0.11595964431762695

答案 1 :(得分:3)

reverse()用C实现,比您的实现快得多。大多数python函数的设计都非常智能,它们可能是最有效的,以维护其所需的功能。如果您愿意做出贡献,可以去CPython github page并尝试改进一些代码。

PyList_Reverse(PyObject *v)
{
    PyListObject *self = (PyListObject *)v;

    if (v == NULL || !PyList_Check(v)) {
        PyErr_BadInternalCall();
        return -1;
    }
    if (Py_SIZE(self) > 1)
        reverse_slice(self->ob_item, self->ob_item + Py_SIZE(self));
    return 0;

仅供参考:reverse()的更简单的python实现就是切片

def reverse(x):
    return x[::-1]