假设我有一组变量需要检查某些条件,如果所述条件为真,则更改。最恐怖的方式是什么?对于大量变量,下面的代码非常冗长。
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
答案 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 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)
然后你仍然可以使用这些名字。