我目前正在通过初学者Codebat跟踪。然而,这两段代码都有用,在编写下面代码的两种方式之间有什么根本错误/不同吗?
感谢,
def mine(myStr, x):
myResult = myStr * x
return myResult
def codebat(thierStr, i):
codeResult = ''
for i in range(i):
codeResult += thierStr
return codeResult
答案 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
中,每当字符串长度增加时,它必须保持重新分配内存。