擅长:python、mysql、java
<p>你有两个问题:</p>
<ol>
<li><p>您的<strong>只在基本情况下</strong><code>return</code>,因此另一个情况将隐式<code>return None</code>;并且</p></li>
<li><p>在基本情况下,<code>three_char_strings</code>不会发生突变。实际上,还不清楚为什么要实现这个来改变外部列表<em>,因为如果需要再次调用它,这将导致问题。</p></li>
</ol>
<p>你应该做些类似的事情:</p>
<pre><code>def split3(str):
if len(str) <= 3:
return [str]
else:
beginning = str[:3]
remaining = str[3:]
return [beginning] + split3(remaining)
</code></pre>
<p>它可以满足您的需要,<em>而不依赖于<code>three_char_list</code>列表在作用域内且在调用函数时为空:</p>
^{pr2}$
<hr/>
<p>这种方法的缺点是会创建多个列表。如果您希望每个顶级通话都有一个列表,您可以这样做,例如:</p>
<pre><code>def split3(str, out=None):
if out is None:
out = []
out.append(str[:3])
if len(str) > 3:
split3(str[3:], out)
return out
</code></pre>
<p>如果您想知道为什么<code>out=None</code>,请参见<a href="https://stackoverflow.com/q/1132941/3001761">"Least Astonishment" and the Mutable Default Argument</a>。在</p>