Python の変数が文字列か辞書かを知る必要があります。次のコードに何か問題がありますか?
if type(x) == type(str()):
do_something_with_a_string(x)
elif type(x) == type(dict()):
do_somethting_with_a_dict(x)
else:
raise ValueError
更新isinstance
: 私は avisser の回答を受け入れました (ただし、よりも が好まれる理由を誰かが説明してくれたら考えが変わりますtype(x) is
)。
しかし、if/elif/else の連続よりも dict (case ステートメントとして) を使用する方がわかりやすいことが多いことを思い出させてくれた nakedfanatic に感謝します。
私の使用例を詳しく説明しましょう。変数が文字列の場合、リストに入れる必要があります。辞書の場合は、一意の値のリストが必要です。私が思いついたのは次のようなものです。
def value_list(x):
cases = {str: lambda t: [t],
dict: lambda t: list(set(t.values()))}
try:
return cases[type(x)](x)
except KeyError:
return None
isinstance
好ましい場合、このvalue_list()
関数をどのように記述しますか?
ベストアンサー1
誰かが関数にUnicode文字列を渡したらどうなるでしょうか?あるいはdictから派生したクラス、あるいはdictのようなインターフェースを実装したクラスでしょうか?次のコードは最初の2つのケースをカバーしています。Python 2.6を使用している場合は、collections.Mapping
dict
代わりにABC ペップ。
def value_list(x):
if isinstance(x, dict):
return list(set(x.values()))
elif isinstance(x, basestring):
return [x]
else:
return None