2012-04-11 24 views
1

私は、Python 2.6用に書かれたコードをPython 2.6にバックポートしようとしています(その理由は、コードが実行されるはずのサーバーがPython 2.6しかなく、管理者がPython 2.7以上をインストールすることを拒否したためです)。リストの理解とラムダ式のPython 2.6 vr。 python 2.7

これは一般的にうまくいきましたが、次の問題が見つかりました。元のコードでは、線(またはそれに類するもの):

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

が有効です。しかし、Python 2.6ではエラーが発生します。このトピックに関する何かをドキュメントで見つけることができませんでした。

理由は何ですか?この問題に対する単純な解決法はありますか?つまり、同じ構文(同じセマンティクス)で異なる構文を使用するラムダ式の定義ですか?

答えて

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]