使用这样的函数:
def example(things):
x1 = 1
x2 = 1
for thing in things:
(x2, y2) = some_function(thing)
x1 += x2
y1 += y2
return (x1, y1)
出现的问题是x1
和x2
代表相同的事情,y1
和y2
也是如此。假设您对x1
和y1
一无所知,那么在这种情况下,x2
和y2
的名称是否有任何经验法则?
在一个更简单的情况下(一个变量),我只会做x += some_function(in)
,但Python不会让我做(x, y) += recursive(in)
,所以我必须有这些。我怀疑这个名字并不是特别重要,但是使用错误的变量名称让我感到困扰。
在今天的情况下,变量是ways
和calls
,我只是在每个变量的前面添加了r
:
def make_change(amount, coins):
# -- stuff -- #
if len(coins) > 1:
(rways, rcalls) = make_change(amount, coins[1:])
ways += rways
calls += rcalls
return (ways, calls)
答案 0 :(得分:3)
如果您有两个具有相似内容的变量,请为它们指定表示相似内容和不同内容的名称。我不知道你在谈论“方式”和“呼叫”是什么,但看起来你所做的是你有一个总数和一个什么样的交易金额?在这种情况下,我称之为“ways_total”和“ways_tx”或类似的东西。
我绝对鼓励你不要做的只是在最后加上“1”和“2”,或故意拼错一个。
就在前几天我正在查看计算运费的程序,我发现了三个变量名为“货运”,“货运成本”和“货运”(最终“t”加倍)。这让我不知道这三者之间有什么区别。我不得不深入研究这个计划。
我已经看到很多程序通过称之为货运1和货运2来“解决”同样的问题。
如果你需要两个变量,它们之间必然存在一些差异,当你编写代码时,你必须知道它有什么不同。给读者一个线索。
答案 1 :(得分:2)
在这种特殊情况下,我将您的ways
和calls
命名为total_ways
和total_calls
,将本地的'r'命名为'r' 。我认为这样的命名对于阅读此代码的其他人来说会更具描述性。
答案 2 :(得分:1)
您可以创建一个自定义结果对象,其中包含您要跟踪的信息,并定义__add__()
方法以便添加它们。
def make_change(amount, coins):
class Tally(object):
def __init__(self, ways=0, coins=0):
self.ways, self.coins = ways, coins
def __add__(self, other):
return Tally(self.ways + other.ways, self.coins + other.coins)
tally = Tally()
# -- stuff, presumably updating tally.ways and tally.coins -- #
if len(coins) > 1:
tally += make_change(amount, coins[1:])
return tally
这似乎要做很多工作,但它确实更明确地表达了意图。