<blockquote>
<p>This problem might be related to this question: Python: How do I pass a variable by reference?</p>
</blockquote>
<p>是的。你知道吗</p>
<blockquote>
<p>How can I work around this issue?</p>
</blockquote>
<p>您需要传递一个可以修改的值,然后修改它。不能修改数字:<code>a</code>可以从引用<code>23</code>改为引用<code>42</code>,但不能使<code>23</code>变为<code>42</code>,反之亦然。你知道吗</p>
<p>在你的例子中,做这件事的自然方法是注意到你正在做的另一件愚蠢的事情——并行使用一堆相关的、类似名称的变量——并通过用序列替换它们来解决这个问题。<code>list</code>类型是一个可修改的序列。您需要传递列表本身,而不仅仅是一个数字量,并指示要替换列表中的哪个元素。但实际上不需要传递列表,因为它已经是<code>self</code></strong>的一部分。你知道吗</p>
<pre><code>class Portfolio(object):
def __init__(self):
self.quantity = [50, 0, 0]
self.cash = 0
def __str__(self):
return ("%d %d %d %.2f")%(self.quantity[0], self.quantity[1], self.quantity[2], self.cash)
def buy(self, stockToBuy, amountToBuy, price, commission=20):
self.quantity[stockToBuy] += amountToBuy
cost = price * amountToBuy
self.cash -= cost + commission
</code></pre>
<p>对于更灵活的解决方案,您可以考虑在股票名称和股票数量之间建立关联——毕竟,谁知道客户将来可能想要什么股票。我们可以简单地用<code>dict</code>来代替。你知道吗</p>
<p>(固定的‘佣金’成本也是不现实的;百分比更有意义。)</p>