大多数Pythonic方法在条件满足时更新变量

时间:2014-07-23 15:56:48

标签: python

假设我有一组变量需要检查某些条件,如果所述条件为真,则更改。最恐怖的方式是什么?对于大量变量,下面的代码非常冗长。

def addTen(var):
    if isinstance(var, int):
        var += 10
    return var

var1 = 1
var2 = "2"
var3 = 3

var1 = addTen(var1)
var2 = addTen(var2)
var3 = addTen(var3)

print(var1) #prints 11
print(var2) #prints 2
print(var3) #prints 13

3 个答案:

答案 0 :(得分:3)

通常你会将它们装入某种容器(可能是一个列表?)......

var = [1, "2", 3]

for i, v in enumerate(var):
    var[i] = addTen(v)

当然,通过列表理解,这种情况更容易/更清晰,因为函数非常简单,可以写成条件表达式:

var = [1, "2", 3]
var = [v + 10 if isinstance(v, int) else v for v in var]

甚至:

var = [addTen(v) for v in var]  # map(addTen, var) works in python2.x, but in python3.x you get an iterator instead of a sequence.

答案 1 :(得分:2)

首先我假设addTen已定义:

def addTen(var):
    if isinstance(var, int):
        var += 10
    return var

更新变量组

有多种选择,都假设你得到某种相关变量的容器。

使用列表

varlst = [1, 2, 3]

if True:
    varlst = map(addTen, varlst)
print varlst

if True:
    varlst = [addTen(itm) for itm in varlst]
print varlst

使用字典

vardict = {"var1": 1, "var2": 2, "var3": 3}

if True:
    vardict = {key: addTen(val) for key, val in vardict.items()}

print vardict

if True:
    for key in vardict:
        vardict[key] = addTen(vardict[key])

print vardict

使用class

class Container(object):
    def __init__(self, var1, var2, var3):
        self.var1 = var1
        self.var2 = var2
        self.var3 = var3

    def addTen(self)
        self.var1 += 10
        self.var2 += 10
        self.var3 += 10

    def __repr__(self):
        templ = "<Container: {self.var1}, {self.var2}, {self.var3}>"
        return templ.format(self=self)

container = Container(1, 2, 3)
container.addTen()
print container

答案 2 :(得分:0)

使用名单列表:

def addTen(var):
    if isinstance(var, int):
        var += 10
    return var

var1 = 1
var2 = "2"
var3 = 3

for var in [var1, var2, var3]:
    print addten(var)

然后你仍然可以使用这些名字。