1. ホーム
  2. パイソン

[解決済み】Pythonの変数の型を確認する最良の(慣用的な)方法は何ですか?[重複している]。

2022-03-25 16:23:08

質問

Pythonの変数が文字列かdictか知りたいのですが。 次のコードに何か問題がありますか?

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

更新情報 : avisserの回答を受け入れました(ただし、誰かが理由を説明すれば、考えを変えます)。 isinstance よりも優先されます。 type(x) is ).

しかし、if/elif/elseの連番よりもdictを(case文として)使ったほうがきれいな場合が多いことを教えてくれたnakedfanaticに感謝します。

私のユースケースを詳しく説明します。 変数が文字列の場合、それをリストに入れる必要があります。 dictの場合は、一意な値のリストが必要です。 私が思いついたのは次のようなものです。

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() という関数があります。

どのように解決するのですか?

誰かがあなたの関数にUnicode文字列を渡した場合、何が起こるのでしょうか?あるいは dict から派生したクラスですか? あるいは、dict のようなインタフェースを実装したクラスはどうなるでしょうか? 以下のコードは最初の2つのケースをカバーしています。Python 2.6 を使っている場合は collections.Mapping の代わりに dict のように ABC PEP .

def value_list(x):
    if isinstance(x, dict):
        return list(set(x.values()))
    elif isinstance(x, basestring):
        return [x]
    else:
        return None