繁体   English   中英

如果满足条件,则使用最新的Python方法更新变量

[英]Most Pythonic way to update variables if condition is met

假设我有一组变量,都需要检查某些条件,如果条件成立,则将其更改。 解决此问题的最Pythonic方法是什么? 下面的代码对于大量变量来说非常冗长。

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

通常,您会将它们包装到某种容器中(也许是列表?)...

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.

首先,我假设定义了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

使用名称列表:

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)

然后,您仍然拥有以后可用的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM