私は最近、@ sequenceableデコレータを作成しました。このデコレータは、1つの引数をとり、自動的にどのシーケンスにも適用できるようにする関数に適用できます。使用の際に私のデコレータはどれくらいうそですか?
def sequenceable(func):
def newfunc(arg):
if hasattr(arg, '__iter__'):
if isinstance(arg, dict):
return dict((k, func(v)) for k, v in arg.iteritems())
else:
return map(func, arg)
else:
return func(arg)
return newfunc
:これは、コード(Pythonの2.5)である
@sequenceable
def unixtime(dt):
return int(dt.strftime('%s'))
>>> unixtime(datetime.now())
1291318284
>>> unixtime([datetime.now(), datetime(2010, 12, 3)])
[1291318291, 1291352400]
>>> unixtime({'start': datetime.now(), 'end': datetime(2010, 12, 3)})
{'start': 1291318301, 'end': 1291352400}
は、私の質問は以下のとおりです。
- これはひどいアイデア、そしてなぜ?
- これはおそらく良いアイデアですか、実装されると重大な欠点がありますか?
- このコードを使用した の潜在的な落とし穴は何ですか?
- は既に私がやっていることをしている組み込みやライブラリはありますか?
これは 'map'とは異なりますか?そして、理解をリストアップしないでください。既に混雑しているコンセプト空間に第3の技術を追加するのはなぜですか? 'map'とlist comprehensionsをどのように改善するか説明してください。 –
map()より改善されていません。 * map()の短縮形です。 map()にはおそらく1つは必要ないが、iteritems() - > list comprehension - > dict()にはメリットがあるかもしれないことに同意する。 –