• type,isinstance判断一个变量的数据类型


    type,isinstance判断一个变量的数据类型

    import types
    type(x) is types.IntType # 判断是否int 类型
    type(x) is types.StringType #是否string类型
    .........

    --------------------------------------------------------

    超级恶心的模式,不用记住types.StringType

    import types
    type(x) == types(1) # 判断是否int 类型
    type(x) == type('a') #是否string类型

    ------------------------------------------------------

    使用内嵌函数:

    isinstance ( object, classinfo )

    Return true if the object argument is an instance of the classinfo argument, or of a (direct or indirect) subclass thereof. Also return true if classinfo is a type object and object is an object of that type. If object is not a class instance or an object of the given type, the function always returns false. If classinfo is neither a class object nor a type object, it may be a tuple of class or type objects, or may recursively contain other such tuples (other sequence types are not accepted). If classinfo is not a class, type, or tuple of classes, types, and such tuples, a TypeError exception is raised. Changed in version 2.2: Support for a tuple of type information was added.
    Python可以得到一个对象的类型 ,利用type函数:

    >>>lst = [1, 2, 3]
    >>>type(lst)
    <type 'list'>


    不仅如此,还可以利用isinstance函数,来判断一个对象是否是一个已知的类型。

    isinstance说明如下:

        isinstance(object, class-or-type-or-tuple) -> bool
       
        Return whether an object is an instance of a class or of a subclass thereof.
        With a type as second argument, return whether that is the object's type.
        The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for
        isinstance(x, A) or isinstance(x, B) or ... (etc.).

    其第一个参数为对象,第二个为类型名或类型名的一个列表。其返回值为布尔型。若对象的类型与参数二的类型相同则返回True。若参数二为一个元组,则若对象类型与元组中类型名之一相同即返回True。

    >>>isinstance(lst, list)
    Trueisinstance(lst, (int, str, list))
    True

    >>>isinstance(lst, (int, str, list))
    True

    python数据类型判断type与isinstance的区别

    在项目中,我们会在每个接口验证客户端传过来的参数类型,如果验证不通过,返回给客户端“参数错误”错误码。这样做不但便于调试,而且增加...

    在项目中,我们会在每个接口验证客户端传过来的参数类型,如果验证不通过,返回给客户端“参数错误”错误码。

    这样做不但便于调试,而且增加健壮性。因为客户端是可以作弊的,不要轻易相信客户端传过来的参数。

    验证类型用type函数,非常好用,比如

    >>type('foo') == str

    True

    >>type(2.3) in (int,float)

    True

    既然有了type()来判断类型,为什么还有isinstance()呢?

    一个明显的区别是在判断子类。

    type()不会认为子类是一种父类类型。

    isinstance()会认为子类是一种父类类型。

    千言不如一码。

    class Foo(object):
        pass
        
    class Bar(Foo):
        pass
        
    print type(Foo()) == Foo
    print type(Bar()) == Foo
    print isinstance(Bar(),Foo)
       
    class Foo(object):
        pass
       
    class Bar(Foo):
        pass
       
    print type(Foo()) == Foo
    print type(Bar()) == Foo
    print isinstance(Bar(),Foo)
    输出
    True
    False
    True

    需要注意的是,旧式类跟新式类的type()结果是不一样的。旧式类都是<type 'instance'>。

    class A:
        pass
        
    class B:
        pass
        
    class C(object):
        pass
        
    print 'old style class',type(A())
    print 'old style class',type(B())
    print 'new style class',type(C())
    print type(A()) == type(B())
       
    class A:
        pass
       
    class B:
        pass
       
    class C(object):
        pass
       
    print 'old style class',type(A())
    print 'old style class',type(B())
    print 'new style class',type(C())
    print type(A()) == type(B())
    输出
    old style class <type 'instance'>
    old style class <type 'instance'>
    new style class <class '__main__.C'>
    True

    不存在说isinstance比type更好。只有哪个更适合需求。

  • 相关阅读:
    HTML总结
    js五角星评分特效
    正则表达式
    C#文件路径的写法
    vs2010发布网站
    INI文件阅读器
    .net读取xml文件中文乱码问题解决办法
    js利用定时器动态改变层大小
    c#中ref和out的用法
    分享一篇关于C#对文件操作的日志,方法很全
  • 原文地址:https://www.cnblogs.com/timssd/p/4688009.html
Copyright © 2020-2023  润新知