Python 两行都返回字符串吗?
我目前正在跟踪初学者代码棒轨迹。这两段代码都可以工作。但是,编写以下代码的两种方法之间是否存在根本性的错误/差异 谢谢Python 两行都返回字符串吗?,python,python-3.x,Python,Python 3.x,我目前正在跟踪初学者代码棒轨迹。这两段代码都可以工作。但是,编写以下代码的两种方法之间是否存在根本性的错误/差异 谢谢 def mine(myStr, x): myResult = myStr * x return myResult def codebat(thierStr, i): codeResult = '' for i in range(i): codeResult += thierStr return codeResult
def mine(myStr, x):
myResult = myStr * x
return myResult
def codebat(thierStr, i):
codeResult = ''
for i in range(i):
codeResult += thierStr
return codeResult
我们可以看到他们给出了相同的结果
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预先分配了新字符串所需的内存。在他们的
中,每当字符串长度增加时,它必须保持重新分配内存
我们可以看到他们给出了相同的结果
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预先分配了新字符串所需的内存。在他们的中,每次字符串长度增加时,它都必须不断重新分配内存。这两个函数都工作并执行相同的操作,但第二个函数具有可怕的时间复杂性,应该避免。我想在第一个函数中,您的意思是myStr*x
?否则他们不会做完全相同的事情。第一个更像蟒蛇。第二个很糟糕。正如@Aran Fey已经指出的,它的时间复杂性很差。此外,for循环覆盖i
的值,这样当循环终止时i
比传递给函数的值小一个。如果该函数中的代码需要(或假定)i
的原始值,它将丢失。谢谢大家!这两个函数都工作并做相同的事情,但是第二个函数的时间复杂度非常糟糕,应该避免使用。我假设在第一个函数中,您的意思是myStr*x
?否则他们不会做完全相同的事情。第一个更像蟒蛇。第二个很糟糕。正如@Aran Fey已经指出的,它的时间复杂性很差。此外,for循环覆盖i
的值,这样当循环终止时i
比传递给函数的值小一个。如果该函数中的代码需要(或假定)i
的原始值,它将丢失。谢谢大家!啊,我明白了。谢谢啊,我明白了。谢谢