首页 > 解决方案 > 这两行都返回一个字符串吗?

问题描述

我目前正在关注初学者 Codebat 轨道。这两段代码都可以工作,但是两种编写以下代码的方式之间有什么根本错误/不同吗?

谢谢,

def mine(myStr, x):
    myResult = myStr * x
    return myResult


def codebat(thierStr, i):
    codeResult = ''
    for i in range(i):
        codeResult += thierStr
    return codeResult

标签: pythonpython-3.x

解决方案


import string  # string.ascii_letters = 'abcde...ABCDE...'

def mine(s, x):
    return s * x  # fixed your code so it multiplies by x, not 4

def theirs(s, x):  # renamed but the same as codebat
    res = ''
    for _ in range(x):
        res += s
    return res

我们可以看到他们给出了相同的结果

mine(string.ascii_letters, 10) == theirs(string.ascii_letters, 10) # --> True

然而,我们可以测试这些功能的时间效率

%timeit mine(string.ascii_letters, 1000)
2.27 µs ± 9.69 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

%timeit theirs(string.ascii_letters, 1000)
202 µs ± 4.24 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

如您所见mine,效率几乎提高了 100 倍,因为在后台 python 预先分配了新字符串所需的内存。theirs每次字符串长度增加时,它都必须重新分配内存。


推荐阅读