这两行都返回一个字符串吗?

时间:2018-04-25 11:39:57

标签: python python-3.x

我目前正在通过初学者Codebat跟踪。然而,这两段代码都有用,在编写下面代码的两种方式之间有什么根本错误/不同吗?

感谢,

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


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

1 个答案:

答案 0 :(得分:6)

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中,每当字符串长度增加时,它必须保持重新分配内存。