擅长:python、mysql、java
<p>使用一个简单的for循环来检索<code>students</code>来更新每个的<code>age</code>已经足够好了,就像其他人所说的,但是如果您仍然想使用<code>lambda</code>来更新值,则可能需要利用<code>exec()</code>函数:</p>
<pre><code>_ = list(map(lambda student: exec("student.age+=3"), students))
for _ in students: print(_.age)
</code></pre>
<p>输出:</p>
<pre><code>21 23 32
</code></pre>
<p>在这种情况下,更新实际上是<code>exec()</code>,而<code>map()</code>只产生<code>None</code>。所以返回的结果毫无意义,我用<code>_</code>来澄清这一点。更简洁的形式是:</p>
<pre><code>list(map(lambda _: exec("_.age+=3"), students))
</code></pre>
<p>此外,如果只考虑您想做什么,您根本不需要使用<code>map()</code>(可能更令人困惑):</p>
<pre><code>[(lambda _: exec("_.age += 3"))(_) for _ in students]
</code></pre>
<p>此外,可以丢弃<code>lambda</code>:</p>
<pre><code>[exec("_.age += 3") for _ in students]
</code></pre>
<p>如您所见,上面的“技巧”代码似乎比其他答案更简洁:</p>
<pre><code>for s in students:
s.age += 3
</code></pre>
<p>所以,也许所谓的“一行”是有用的,只是当它有乐趣。。。:)</p>