在dict.get()中使用变量值作为默认值是一种错误的模式吗?

时间:2019-01-25 17:55:31

标签: python

我目前正在编写一些通常具有以下模式的代码:

class Thing2:
    defaults = {
        'on':1,
        'off': 0
    }
    def something(self, k, v):
        v = self.defaults.get(v, v)
        print(f'SET {k} {v}')

但是,发生在我身上的我可以通过执行以下操作来缩短{{1}}语句:

{{1}}

这很方便,但这是不好的做法吗?

1 个答案:

答案 0 :(得分:1)

可以将泛型if语句替换为更具体的条件。它使意图更清晰,更简洁。

但是您在这里也进行了细微的类型更改,因为默认键和值是不同的。以后可能会引起问题。

例如,如果您设置v = defaults.get(v, v)并且存在默认值,则可以将其从字符串更改为整数。如果您将它们视为仅可打印的对象,那就很好。但是,如果您打算继续对它们进行计算,那将非常重要。

所以问一个问题:我要改变这种东西的类型吗?如果答案是肯定的,请找到另一个名字。否则就可以了。

做到这一点,这很好,您正在打印可打印的东西:

class Thing2:
    defaults = {
        'on':1,
        'off': 0
    }
    def something(self, k, v):
        v = self.defaults.get(v, v)
        print(f'SET {k} {v}')

这不行,您要更改类型

class Thing3:
    defaults = {
        'on':1,
        'off': 0
    }
    def something(self, k: int, v):
        v = self.defaults.get(v, v)
        return k + v

print("The total is: " + thing.something(10, 'on')) # TypeError probably

这没关系,因为类型不变

class Thing4:
    defaults = {
        'on':"1"
        'off': "0"
    }
    def something(self, k, v):
        v = self.defaults.get(v, v)
        return k + v

print(thing.something('The result is: ' + 'on')