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更好。只有哪个更适合需求。

type,isinstance判断一个变量的数据类型的更多相关文章

  1. Python3基础 isinstance 判断一个变量是否为指定的类型

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  2. Javascript如何判断一个变量是数字类型?

    isNaN()不能判断一个变量是否为数字类型,isNaN(123)值为false,isNaN('123')值也为false.isNaN() 的实际作用跟它的名字isNaN并不一致,isNaN(NaN) ...

  3. shell判断一个变量是否为空

    判断一个变量是否为空 . 1. 变量通过" "引号引起来 如下所示:,可以得到结果为 IS NULL. #!/bin/sh para1= if [ ! -n "$para ...

  4. 如何判断一个变量是数组Array类型

    在很多时候,我们都需要对一个变量进行数组类型的判断.JavaScript中如何判断一个变量是数组Array类型呢?我最近研究了一下,并分享给大家,希望能对大家有所帮助. JavaScript中检测对象 ...

  5. empty是判断一个变量是否为“空”,而isset 则是判断一个变量是否已经设置

    1.echo和print的区别php中echo和print的功能基本相同(输出),但是两者之间还是有细微差别的.echo输出后没有返回值,但print有返回值,当其执行失败时返回flase.因此可以作 ...

  6. shell中判断一个变量是否为0或者为某个具体的值

    需求说明: 在实际写脚本的过程中,需要判断某个变量的值是否为某个数字, 比如,判断某个进程的数量是否为0用来确定进程是否存在,这样的情况. 简单来说,算术比较. 测试过程: 通过以下的脚本来判断mys ...

  7. 分享一个js技巧!判断一个变量chat_websocket是否存在。

    注意!!! 判断一个变量chat_websocket是否存在:if( "undefined" == typeof(chat_websocket) || null == chat_w ...

  8. 【shell】判断一个变量是否为空

    #!/bin/bash argv=" if [ -z "$argv" ] then echo "argv is empty" else echo &q ...

  9. javascript判断一个变量或对象是否存在

    判断一个变量或对象是否存在,是一种常用的操作.我这里收集了几种. //1. 最常用的一种方法.if(typeof v == 'undefined'){ console.log("v is u ...

随机推荐

  1. 64位windows8.1编译openjdk8

    首先下载openjdk8http://hg.openjdk.java.net/jdk8/jdk8/这里用到版本管理工具Mercurial,与git有些类似,不了解的话可以查一下.clone后,里面有个 ...

  2. SQL Convert XML to Table

    将xml nodes 属性中的值 转为table 形式 declare @xml2 xml set @xml2 = '<CMADatas> <CMAData CmaName=&quo ...

  3. BZOJ 1801: [Ahoi2009]chess 中国象棋( dp )

    dp(i, j, k)表示考虑了前i行, 放了0个炮的有j列, 放了1个炮的有k列. 时间复杂度O(NM^2) -------------------------------------------- ...

  4. Expression Language

    EL找不到属性会返回"" page –-  request --- session --- application ------------------------------- ...

  5. LineCalc,一个基于Lex&Yacc的简单行计算工具

    LineCalc是基于Lex&Yacc的一个简单的行计算工具,支持常见的运算符和部分POSIX中定义于math.h中的数学函数:同时,LineCalc还提供了一个简单的错误处理模块,能检测公式 ...

  6. MySQL学习系列一---命令行连接mysql和执行sql文件

    1.命令行连接mysql #mysql -h(主机) -u(用户名) -p (数据库名) mysql -hlocalhost -uroot -p testdb Enter password: **** ...

  7. python进阶6 HTTP协议客户端实现

    httplib 1.httplib 是 python中http 协议的客户端实现,可以使用该模块来与 HTTP 服务器进行交互. httplib的内容不是很多,也比较简单.以下是一个非常简单的例子,使 ...

  8. zookeeper 伪集群模式

    问题二:开发没有足够机器,一台机子上是否装三个zookeeper服务器集群. 问题解答: 这种安装模式只能说是一种伪集群模式.三个zookeeper服务器都安装在同一个服务器(platform)上,需 ...

  9. Javascript 风格向导

    序   大部分针对Javascript最合理的方法归纳.   类型   • 原始类型:我们可以直接使用值. ο string ο number ο boolean ο null ο undefined ...

  10. PHP批量下载方法

      PHP批量下载方法 界面: $.get(“< ?php echo url::base(true);?>inventory/report/buildCsv”, //后台路径 {‘para ...