【发布时间】:2020-12-22 03:31:15
【问题描述】:
我在 Python 中看到了一些我以前从未见过的东西。
我正在编写动态编程教程,以查找两个字符串之间的最长公共子序列。为了澄清我不想帮助解决这个问题。我的问题是参数 accs 是存储之前函数调用的返回值。
代码如下:
def lcs(str1 = '', str2 = '', accs = []):
if str1 and str2:
str1 = list(str1)
str2 = list(str2)
for char1 in str1:
for char2 in str2:
if char1 == char2:
accs.append(char1)
str1.remove(char1)
str2.remove(char2)
return lcs(''.join(str1), ''.join(str2), accs=accs)
str1.remove(char1)
return lcs(''.join(str1), ''.join(str2), accs)
else:
return accs
print(lcs('AGGTAB','GXTXAYB'))
print(lcs('ABCDGH','AEDFHR'))
打印语句返回
['A', 'G', 'T', 'B']
['A', 'G', 'T', 'B', 'A', 'D', 'H']
第一个打印语句是正确的,但第二个包含第一个的子字符串。
当我在上面代码下方的单元格中运行函数 lcs(无括号)而不调用它时,我得到以下信息:
<function __main__.lcs(str1='', str2='', accs=['A', 'G', 'T', 'B', 'A', 'D', 'H', 'A', 'D', 'H'])>
我尝试在 Jupyter-lab 的单元格中运行代码,然后在 VSCode 和命令行中将其作为脚本运行,并且值似乎在两者的参数中累积。这里发生了什么?
在 WSL2 下的 Ubuntu 中运行 Python 3.8.5,在 Windows 上运行 Python 3.9.1。两个地方的问题都很相似。
【问题讨论】:
-
这 - stackoverflow.com/questions/41686829/… 能回答你的问题吗?
-
@Daniel Hao 发了一个很好的链接,你也可以看这里解释:docs.python-guide.org/writing/gotchas
标签: python-3.x