2014-02-07 61 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

相關問題