python的函数调用成本,比想象得高_Python源码剖析书评-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > Python源码剖析 > python的函数调用成本,比想象得高
智障 Python源码剖析 的书评 发表时间:2017-01-17 21:01:11

python的函数调用成本,比想象得高

书中在讲到字符串是不可变对象时,提出了一个建议,把字符串相加,写成列表的join,如下:

result = a + b
改写成,
result = ''.join([a, b])

以为,这样,可以避免不可变对象的拷贝问题。其实,python的函数调用成本,比这个字符串相加,导致的拷贝成本,本高得多——感谢@冒.。O〇泡。

今天,写了一个简单的程序测试,在我的机器上,直到10个长度为15的字符串相加,还是,比10个长度为15的字符串join,运行得快。代码,贻笑大方如下:

# -*- coding:utf-8 -*-
import random
import string
import time

chars = string.letters + string.digits + string.whitespace

def generate_string(length):
    s = ''
    while len(s) < length:
        c = chars[random.randrange(len(chars))]
        if c == 'n':
            c = '\n'
        elif c == 'r':
            c = '\r'
        elif c == 'f':
            c = '\f'
        elif c == 'v':
            c = '\v'
        s += c
    return s;


def f(length, count):
    L = []
    L2 = []
    for i in xrange(10000):
        row = []
        while len(row) < count:
            row.append(generate_string(length))
            pass
        line = ""+"".join(row)
        L.append("rv = "%s"" % line)
        line2 = "","".join(row)
        L2.append("rv = ''.join(["%s"])" % line2)

    text = 'n'.join(L)
    text2 = 'n'.join(L2)
    t1 = time.time()
    exec text
    print time.time() - t1
    t2 = time.time()
    exec text2
    print time.time() - t2


if __name__ == '__main__':
    f(10, 15)

展开全文
有用 0 无用 0

您对该书评有什么想说的?

发 表

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读