最佳的方法来检查一个变量是否为列表是什么?
最佳的方法来检查一个变量是否为列表是什么?
这个问题已经有答案了:
我发现了这三种检查方法,但我不知道哪一个更好:
x = ['Bla', 'Bla', 'Bla', 'etc'] if isinstance(a, list): print('Perfect!') if type(a) is list: print('Incredible!') if type(a) == type([]): print('Awesome!')
这些中哪个更好?
另外,我能使用这些方法来检查一个x是否为字符串、元组、字典、整数、浮点数等吗?如果这是可能的,在前两种方法中我需要把列表转换为元组、字符串、字典、整数、浮点数等吗(不需要吗?),但在第三种方法中呢?我需要使用()、{}、\'\'以及什么来表示整数和浮点数?
admin 更改状态以发布 2023年5月20日
通常我们更喜欢使用isinstance(a, list)
,因为它允许a成为列表或列表子类。
为了更好的速度,一种精确的检查可以进行标识测试,即type(a) is list
。这比使用==
快一些。
话虽如此,Python中的规范是尽量避免类型检查,而是做“鸭子类型”。你在a上调用list方法,如果它们成功,那么我们认为a已足够像列表了。
这些表达方式都表示不同的事情,所以实际上这取决于你想要实现的确切目标: \n\n- isinstance(x, list)
检查x
是否是list
类型或者具有list
作为其父类(为简单起见,我们忽略了ABC);\n- type(x) is list
检查x
的类型是否恰好为list
;\n- type(x) == list
检查类型的相等性,这与完全相同的类型是不同的,因为元类可以挑战性地覆盖__eq__
。\n\n所以,它们依次表达以下内容: \n\n- isinstance(x, list)
: x
是否像一个list
;\n- type(x) is list
:x
是否精确是一个list
而不是子类;\n- type(x) == list
: x
是否是一个list
,或者其他使用元类魔法伪装成一个list
的类型。