通常、この種のことを強制することは悪い考えです。多くの場合、あなたができる最もpythonicなことは、あなたのアイテムがシーケンスかどうかをチェックすることです:
import collections
def to_sequence(item):
return item if isinstance(item,collections.Sequence) else [item]
これが渡したくないものを渡す1つの例は、文字列です...文字列はシーケンスであるため、to_sequence('foo')
返さ'foo'
れませんが、どちらか['foo']
になりたいとは思われませ['f','o','o']
ん...したがって、特別なケースが必要になる場合があります必要に応じてそのために。
そのための簡単な修正は次のとおりです(python2.xの場合):
import collections
def to_sequence(item):
return item if isinstance(item,collections.Sequence) and hasattr(item,'__iter__') else [item]
しかし、繰り返しになりますが、通常、「pythonic」にすべきことは、この種のチェックを延期し、何らかのコンテキストでオブジェクトを使用しようとすることです。オブジェクトが失敗した場合は、反応するために何かを行うことができます。