我需要知道 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)。
isinstance
type(x) is
但是感谢裸狂热者提醒我,使用 dict(作为案例陈述)通常比使用 if/elif/else 系列更干净。
让我详细说明我的用例。如果一个变量是一个字符串,我需要把它放在一个列表中。如果它是一个字典,我需要一个唯一值列表。这是我想出的:
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()函数?
value_list()
如果有人将 unicode 字符串传递给您的函数会发生什么?还是从dict派生的类?还是一个实现类dict接口的类?以下代码涵盖了前两种情况。如果您使用的是 Python 2.6,您可能希望使用collections.Mapping而不是dict按照ABC PEP。
collections.Mapping
dict
def value_list(x): if isinstance(x, dict): return list(set(x.values())) elif isinstance(x, basestring): return [x] else: return None