如果您想将动态宽度传递给格式化函数,您可以:
>>> width = 5
>>> value = 2
>>> '%0*d' % (width, value)
'00002'
使用新型格式更容易,因为您可以在占位符中嵌入占位符:
>>> width = 5
>>> value = 2
>>> '{1:0{0}}'.format(width, value)
'00002'
如果您还想知道如何在输出之前获得所有值中最长的值,只要您可以对这些值进行两次迭代,这很容易:
>>> values = 3, 100, 50000
>>> width = max(len('%0d' % value) for value in values)
>>> ', '.join('%0*d' % (width, value) for value in values)
'00003, 00100, 50000'
如果你想基于一个参数,那就更容易了:
fx = lambda z,y=999: [ "%0*d" % (len('%0d' % y), x) for x in range(y) if str(z) in str(x) ]
但是,这将y
一遍又一遍地计算宽度,因为在表达式内部没有简单的方法来存储它,并且 alambda
只能接受一个表达式。
这就提出了一个问题,即你为什么首先使用 a lambda
。lambda
over的唯一优点def
是您可以在表达式中使用它,而无需为其命名。如果您要将其分配给一个名称,那么这两个优点都会消失。所以,只需这样做:
def fx(z, y=999):
width = len('%0d' % y)
return ["0%*d" % (width, x) for x in range(y) if str(z) in str(x)]