<p><a href="https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists" rel="nofollow noreferrer">Python functions can be called with a single list of arguments</a>,而不是多个单独的参数</p>
<p>根据<code>flip</code>的状态,我们可以使用它来生成一组参数和一组相反的参数</p>
<pre><code>def lenumerate(s, flip=False):
words = text.split()
word_lengths = [len(x) for x in text.split()]
args = [words, word_lengths] if flip else [word_lengths, words]
return list(zip(*args))
text = "But then of course African swallows are nonmigratory"
print(lenumerate(text))
print(lenumerate(text, True))
</code></pre>
<p>印刷品</p>
<pre><code>[(3, 'But'), (4, 'then'), (2, 'of'), (6, 'course'), (7, 'African'), (8, 'swallows'), (3, 'are'), (12, 'nonmigratory')]
[('But', 3), ('then', 4), ('of', 2), ('course', 6), ('African', 7), ('swallows', 8), ('are', 3), ('nonmigratory', 12)]
</code></pre>
<p>注意事项</p>
<ul>
<li>你刚才用的括号是多余的</li>
<li>尽量使用会说话的变量名,而不是<code>a</code>和<code>b</code></li>
</ul>
<p>Python的<em>列表理解</em>使得首先避免编写函数成为可能。上述函数可以写成:</p>
<pre><code>result = [(word, len(word)) for word in text.split()]
print(result)
</code></pre>