代码之家  ›  专栏  ›  技术社区  ›  Brendan Long

当您想要的名称已经被取下时,变量的命名方法

  •  0
  • Brendan Long  · 技术社区  · 14 年前

    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个 ,有什么命名的经验法则吗 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)
    
    3 回复  |  直到 14 年前
        1
  •  3
  •   Jay    14 年前

    当您有两个具有相似内容的变量时,请为它们命名,以表示相似的内容和不同的内容。我不知道你说的“方式”和“电话”是什么意思,但看来你所做的是你有一个总额和一个,什么,交易金额?在这种情况下,我会叫他们“ways_total”和“ways_tx”之类的。

    我绝对鼓励你不要在结尾加上“1”和“2”,或者故意拼错。

    前几天我在看一个计算运费的程序,我发现了三个变量,分别是“运费”、“运费”和“运费”(最后的“t”翻了一番)。这让我不知道这三者之间有什么区别。我得仔细研究程序才能搞清楚。

    如果您需要两个变量,它们之间一定有一些差异,当您编写代码时,您必须知道这种差异是什么。给读者一个线索。

        2
  •  2
  •   mojuba    14 年前

    ways calls 作为 total_ways total_calls 也会有本地的没有r的。我认为这样的命名对于阅读此代码的其他人来说会更具描述性。

        3
  •  1
  •   kindall    14 年前

    可以创建一个自定义结果对象,该对象包含要跟踪的信息并定义 __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
    

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