2014-02-07 59 views
1

我有一个方法/函数可以传递多个可能具有None值的变量。我如何检查所有变量为None值,并以最可能的pythonic方式将其替换为字符串?检查条件是否与多个变量匹配

示例代码:

def logData(self, var1=None, var2=None, var3=None): 
    if var1 is None: 
     var1 = "---" 
    if var2 is None: 
     var2 = "---" 
    if var3 is None: 
     var3 = "---" 

    # what I would prefer/pseudo code: 
    if list(var1, var2, var3) is None: 
     list[1] = "---" 

回答

2
var1, var2, var3 = (a or '---' for a in [var1, var2, var3]) 
+2

如果var1是0会怎么样? – markrages

+0

@markrages这个检查通常是当变量是mutabe时添加的,我认为对于整数是不需要的......但是,这样我就无法处理0,条件应该改成类似superjump的答案 – ndpu

+0

我对此很陌生方法,你能准确解释每一步做什么吗? – DominicM

-1

您可以通过使用**kwargs实现这一点:

def logData(self, **kwargs): 
    for key,value in kwargs.iteritems(): 
    if value is None: 
     # do assignment ... 
+0

你会调用该函数同样的方式,单独传递参数? – DominicM

2

使用元组拆包:

var1, var2, var3 = ['---' if (x is None) else x for x in (var1, var2, var3)] 
+0

对我来说似乎很复杂,你能多解释一下吗? – DominicM

+0

@DominicM这里的元组拆包的一个简单的例子: #组VAR1 1,VAR2为2,VAR3至3 VAR1,VAR2,VAR3 = 1,2,3 #现在想象你的函数调用的参数 #var1 == 0,var2 == None和var3 = 5,列表理解 #以下: – superjump

+0

@DominicM。哎呀,还没有评论的悬念。我想说的是,答案中的列表comp会遍历传递给你的函数的值(var1,var2,var3),如果它们中的任何一个都是'None',用'---'替换它们,否则保持不变。此外,列表comp将评估为三个值,这些值依次分配给左侧的变量名称,在本例中为var1,var2,var3。 – superjump

相关问题