数字为无时不打印

时间:2014-09-23 17:48:54

标签: python printing

此脚本

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)

但是使用此定义,脚本错误为“ TypeError:%d format:需要一个数字,而不是NoneType ”。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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,你可以过滤掉None值并使用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 

或用空格替换None值:

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