如果你想通过动态宽度格式化功能,您可以:
>>> 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
宽度,因为在表达式中有没有简单的方法来存储,并且lambda
只能采取一种表达。
这引发了你为什么首先使用lambda
这个问题。 lambda
优于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)]
是否有这个标签'lambda'和'lambda-functions'的原因?首先,为什么这首'lambda'而不是'def'呢?其次,这个问题的任何一种方式如何? – abarnert 2013-05-09 22:48:11
lambda的目的是做快速的匿名函数,一旦你指定它,它不再是匿名的,你最好使用标准的“def myfuc()”。 – monkut 2013-05-09 22:54:23
@abarnert:我为lambda标签道歉;现在删除。 – MacUsers 2013-05-09 23:00:18