2014-09-23 28 views
0

這個腳本打印沒事的時候數是無

def P(t, n): 
    if n == None: 
     print "%s" % t 
    else: 
     print "%-10s %3d" % (t, n) 


P('a' , 4) 
P('bc' , 12) 
P('defgh', 876) 
P('ijk' ,None) 

打印執行時

a   4 
bc   12 
defgh  876 
ijk 

。功能P可以縮短以便輸出保持不變?

我曾希望我可以定義爲P

def P(t, n): 
    print "%-10s %3d" % (t, n) 

但這個定義,腳本錯誤「類型錯誤:%d格式:需要一個數字,不NoneType」。

回答

1
def P(t, n): 
    print "%-10s %3d" % (t, n) if n else "%s" % t 

如果你想打印傳單N如果n = 0

print "%-10s %3d" % (t, n) if n is not None else "%s" % t 

如果您有多個ARGS可以篩選出無值,並使用str.format。

def P(t, *args): 
    args = filter(None, args) 
    print t,("{} "*len(args)).format(*args) 

,輸出:

In [2]: P('defgh', 876, None, 33,None,100) 
defgh 876 33 100 

或更換無有空間值:

def P(t, *args): 
    print t,("{} "*len(args)).format(*[arg if arg else " " for arg in args]) 

,輸出:

In [4]: P('defgh', 876, None, 33,None,100) 
defgh 876 33 100 
1
def P(t, n): 
    print "%-10s %3s" % (t, ('' if n == None else n)) 

P('a' , 4) 
P('bc' , 12) 
P('defgh', 876) 
P('ijk' ,None) 
+0

所以,如果'P'有很多數字參數('P(t,n1,n2,n3,...)'),我想打印它們,我有e重複'(''if nX == None else nX)'pattern?沒有縮寫?我必須承認:在很多地方,蟒蛇真的很優雅,但在這裏我幾乎有點失望。 – 2014-09-23 18:29:41

+0

如果你需要它很多值,你可以很容易地將它重構成一個函數。 – kindall 2014-09-23 18:44:00