如果你想通過動態寬度格式化功能,您可以:
>>> 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