2012-04-11 48 views
1

我正在嘗試將用於python 2.7的代碼移植到python 2.6中(原因是代碼應該運行的服務器只有python 2.6,管理員拒絕安裝python 2.7或更高版本)。python 2.6 vr中的列表理解和lambda表達式python 2.7

一般來說,這工作得很好,但我發現了以下問題。在原始代碼行(或類似的東西):

g = lambda x : ['{:d}'.format(i) for i in x] 
g([1,2,3,4]) 

工作正常。但是,在Python 2.6中,它們會產生一個錯誤。在文檔上找不到關於此主題的任何內容。

是什麼原因?有沒有簡單的解決這個問題的方法,即定義相同的lambda表達式(相同的語義),但使用不同的語法?

回答

4

在Python 2.6,需要字段名稱(參見Format String Syntax)。在Python 2.7+,it can be omitted

改變在2.7版本:的位置參數說明符可以被省略,因此'{} {}'相當於'{0} {1}'

所以,如果你想你的代碼兼容的Python 2.6,它寫像這樣:

g = lambda x : ['{0:d}'.format(i) for i in x] 
g([1,2,3,4]) 
0

在2.6,str.format()必須有位置確定。

g = lambda x : ['{0:d}'.format(i) for i in x]