在Python中键入检查

时间:2011-03-16 23:33:48

标签: python types

如何查看功能参数的类型?例如,

def hello(x):
   # check if x is tuple
   # check if x is dictionary.
   ...

修改

isinstance(x, type(()))
isinstance(x, type({}))

3 个答案:

答案 0 :(得分:7)

你没有。

你永远不应该不确定python中的东西类型;它基本上不可能准确检查。虽然可以进行一些天真的表面级检查,但问题是python非常灵活。你的函数不应该关心它是否通过了一个dict或类似于dict的东西,而解决这个问题的最好办法就是不要检查它。

真正的问题是“为什么我不知道某事物的类型是什么?”

答案 1 :(得分:5)

如果您确实要检查,可以使用isinstance()

另请参阅此comparison of type checking methods以及您不应该检查的原因!

答案 2 :(得分:2)

Python的最佳做法是使用鸭子打字:如果它像鸭子一样走路,像鸭子一样呱呱叫,就像鸭子一样对待它。所以,你关心的不是某个东西是一个词典还是一个列表:你关心你是否可以对待(在鸭子类比中,你不关心它是否是人类,只要它像鸭子一样走路,像鸭子一样呱呱叫。)

例如,如果要提取元素:

def get_element(obj, index):
 return obj[index]
只要您传递给它的对象理解[index]的含义,

就会起作用。

现在,您实际上可以使用isinstance来检查对象是否是类的实例,但这通常用于内省目的。我偶尔使用它而不是鸭子打字,后来才后悔并回到Python的最佳实践。

所以,我建议你看看你想要实现的目标,看看你是否可以使用鸭子打字。

干杯。