python - 这两行都返回一个字符串吗?
问题描述
我目前正在关注初学者 Codebat 轨道。这两段代码都可以工作,但是两种编写以下代码的方式之间有什么根本错误/不同吗?
谢谢,
def mine(myStr, x):
myResult = myStr * x
return myResult
def codebat(thierStr, i):
codeResult = ''
for i in range(i):
codeResult += thierStr
return codeResult
解决方案
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
每次字符串长度增加时,它都必须重新分配内存。
推荐阅读
- python - 所有 Flask 端点返回 404(未找到)
- javascript - Javascript比较两个数组并获取不匹配的值
- vba - 运行时错误 49,Excel/VBA 的 D 语言 DLL 中的错误 DLL 调用约定 - 我错过了什么?
- r - 无法安装软件包“DescTools”
- html - 添加具有相关 id=class 的悬停时表闪烁
- regex - 用变量中的多个空格替换单个空格
- c# - 如何在 C# 中基于给定宽度且无填充的文本生成图像
- curl - 如何查询最新文件并仅使用 curl 从 JFrog Artifactory 中提取该文件?
- javascript - Vuejs组件停止打开http连接
- batch-file - 复制目录中所有内容的批处理