如何检查变量类型是否为原始类型?
我不知道怎么检查一个变量是不是基本类型。在Java中是这样做的:
if var.isPrimitive():
8 个回答
33
在Python中,所有东西都是对象;甚至整数和布尔值也是。所以如果你说的“原始类型”是指“不是对象”的话(就像在Java中那样使用这个词),那么在Python里是没有这种类型的。
如果你想知道某个值(记住,在Python中变量没有类型,只有值有类型)是否是整数、浮点数、布尔值或者你认为的“原始类型”,你可以这样做:
if type(myval) in (int, float, bool, str ...):
# Sneaky stuff
(我还需要提一下,类型本身也是对象,并且有自己的类型吗?)
如果你还需要考虑那些继承了内置类型的类型,可以看看内置的isinstance()函数。
Python的高手们通常会写出尽量少假设输入类型的代码。允许这种灵活性是Python的一大优点:这常常让代码以意想不到的方式工作。所以你可能想避免写出在类型之间做任意区分的代码。
35
大家都说,Python里没有原始数据类型。但我觉得,这就是你想要的东西。
def isPrimitive(obj):
return not hasattr(obj, '__dict__')
isPrimitive(1) => True
isPrimitive("sample") => True
isPrimitive(213.1311) => True
isPrimitive({}) => True
isPrimitive([]) => True
isPrimitive(()) => True
class P:
pass
isPrimitive(P) => False
isPrimitive(P()) => False
def func():
pass
isPrimitive(func) => False
45
因为Python没有原始类型,所以你需要自己定义什么是原始类型:
primitives = (bool, str, int, float, type(None))
def is_primitive(obj):
return isinstance(obj, primitives)
那么,你是否认为从原始类型继承的类的实例也算是原始类型呢?比如:
class MyStr(str):
...
如果你想把MyStr()
排除在原始类型之外,你可以这样做:
def is_primitive(obj):
return type(obj) in primitives