当您想要的名称已被采用时,如何命名变量

时间:2010-11-01 00:04:23

标签: naming-conventions

使用这样的函数:

def example(things):
    x1 = 1
    x2 = 1
    for thing in things:
        (x2, y2) = some_function(thing)
        x1 += x2
        y1 += y2
    return (x1, y1)

出现的问题是x1x2代表相同的事情,y1y2也是如此。假设您对x1y1一无所知,那么在这种情况下,x2y2的名称是否有任何经验法则?

在一个更简单的情况下(一个变量),我只会做x += some_function(in),但Python不会让我做(x, y) += recursive(in),所以我必须有这些。我怀疑这个名字并不是特别重要,但是使用错误的变量名称让我感到困扰。

在今天的情况下,变量是wayscalls,我只是在每个变量的前面添加了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)

3 个答案:

答案 0 :(得分:3)

如果您有两个具有相似内容的变量,请为它们指定表示相似内容和不同内容的名称。我不知道你在谈论“方式”和“呼叫”是什么,但看起来你所做的是你有一个总数和一个什么样的交易金额?在这种情况下,我称之为“ways_total”和“ways_tx”或类似的东西。

我绝对鼓励你不要做的只是在最后加上“1”和“2”,或故意拼错一个。

就在前几天我正在查看计算运费的程序,我发现了三个变量名为“货运”,“货运成本”和“货运”(最终“t”加倍)。这让我不知道这三者之间有什么区别。我不得不深入研究这个计划。

我已经看到很多程序通过称之为货运1和货运2来“解决”同样的问题。

如果你需要两个变量,它们之间必然存在一些差异,当你编写代码时,你必须知道它有什么不同。给读者一个线索。

答案 1 :(得分:2)

在这种特殊情况下,我将您的wayscalls命名为total_waystotal_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

这似乎要做很多工作,但它确实更明确地表达了意图。