网站地图 | RSS订阅 老铁博客 - 上海SEO优化|上海网站建设|蜘蛛池出租|站群代搭建
你的位置:首页 » 前端脚本 » 正文

isinstance,c语言判断输入的字符的类型

2020-6-10 13:54:35 | 作者:老铁SEO | 0个评论 | 人浏览

  整体的意思是“创建一个类型变量cur,它引用游标”,除了cur外,其余全是关键字。


  TYPEcur:定义类型变量


  isrefcursor:相当于数据类型,不过是引用游标的数据类型。


  这种变量通常用于存储过程和函数返回结果集时使用,因为PL/SQL不允许存储过程或函数直接返回结果集,但可以返回类型变量,于是引用游标的类型变量作为输出参数或返回值就应运而生了。


  Python中为什么推荐使用isinstance来进行类型判断


  Python在定义变量的时候不用指明具体的的类型,解释器会在运行的时候会自动检查变量的类型,并根据需要进行隐式的类型转化。因为Python是动态语言,所以一般情况下是不推荐进行类型转化的。比如"+"操作时,如果加号两边是数据就进行加法操作,如果两边是字符串就进行字符串连接操作,如果两边是列表就进行合并操作,甚至可以进行复数的运算。解释器会在运行时根据两边的变量的类型调用不同的内部方法。当加号两边的变量类型不一样的时候,又不能进行类型转化,就会抛出TypeError的异常。


  但是在实际的开发中,为了提高代码的健壮性,我们还是需要进行类型检查的。而进行类型检查首先想到的就是用type(),比如使用type判断一个int类型。


  importtypes


  iftype(1)istypes.Integer:


  print('1是int类型')


  else:


  print('1不是int类型')


  上面的程序会输出:1是int类型


  我们在types中可以找到一些常用的类型,在2.7.6中显示的结果:


  types.BooleanType#bool类型


  types.BufferType#buffer类型


  types.BuiltinFunctionType#内建函数,比如len()


  types.BuiltinMethodType#内建方法,指的是类中的方法


  types.ClassType#类类型


  types.CodeType#代码块类型


  types.ComplexType#复数类型


  types.DictProxyType#字典代理类型


  types.DictType#字典类型


  types.DictionaryType#字典备用的类型


  types.EllipsisType


  types.FileType#文件类型


  types.FloatType#浮点类型


  types.FrameType


  types.FunctionType#函数类型


  types.GeneratorType


  types.GetSetDescriptorType


  types.InstanceType#实例类型


  types.IntType#int类型


  types.LambdaType#lambda类型


  types.ListType#列表类型


  types.LongType#long类型


  types.MemberDescriptorType


  types.MethodType#方法类型


  types.ModuleType#module类型


  types.NoneType#None类型


  types.NotImplementedType


  types.ObjectType#object类型


  types.SliceTypeh


  types.StringType#字符串类型


  types.StringTypes


  types.TracebackType


  types.TupleType#元组类型


  types.TypeType#类型本身


  types.UnboundMethodType


  types.UnicodeType


  types.XRangeType


  在Python3中,类型已经明显减少了很多


  types.BuiltinFunctionType


  types.BuiltinMethodType


  types.CodeType


  types.DynamicClassAttribute


  types.FrameType


  types.FunctionType


  types.GeneratorType


  types.GetSetDescriptorType


  types.LambdaType


  types.MappingProxyType


  types.MemberDescriptorType


  types.MethodType


  types.ModuleType


  types.SimpleNamespace


  types.TracebackType


  types.new_class


  types.prepare_class


  但是我们并不推荐使用type来进行类型检查,之所以把这些类型列出来,也是为了扩展知识面。那为什么不推荐使用type进行类型检查呢?我们来看一下下面的例子。


  importtypes


  classUserInt(int):


  def__init__(self,val=0):


  self.val=int(val)


  i=1


  n=UserInt(2)


  print(type(i)istype(n))


  上面的代码输出:False


  这就说明i和n的类型是不一样的,而实际上UserInt是继承自int的,所以这个判断是存在问题的,当我们对Python内建类型进行扩展的时候,type返回的结果就不够准确了。我们再看一个例子。


  classA():


  pass


  classB():


  pass


  a=A()


  b=B()


  print(type(a)istype(b))


  代码的输出结果:True


  type比较的结果a和b的类型是一样的,结果明显是不准确的。这种古典类的实例,type返回的结果都是一样的,而这样的结果不是我们想要的。对于内建的基本类型来说,使用tpye来检查是没有问题的,可是当应用到其他场合的时候,type就显得不可靠了。这个时候我们就需要使用isinstance来进行类型检查。


  isinstance(object,classinfo)


  object表示实例,classinfo可以是直接或间接类名、基本类型或者有它们组成的元组。


  >>>isinstance(2,float)


  False


  >>>isinstance('a',(str,unicode))


  True


  >>>isinstance((2,3),(str,list,tuple))


  True


  python3isinstance函数的用法,下面的代码如何解释?


  isinstance的用法:


  语法:


  isinstance(object,classinfo)


  其中,object是变量,classinfo是类型即(tuple,dict,int,float,list,bool等)和class类


  若参数object是classinfo类的实例,或者object是classinfo类的子类的一个实例,返回True。


  若object不是一个给定类型的的对象,则返回结果总是False。


  若classinfo不是一种数据类型或者由数据类型构成的元组,将引发一个TypeError异常。


  例如:


  >>>isinstance(3,int)


  True


  >>>


  >>>isinstance(3.5,float)


  True


  >>>


  >>>isinstance(123,str)


  False


  >>>


  >>>isinstance('adf',(str,float,int))


  True


  >>>


  >>>classmyClass:


  pass


  >>>test=myClass()


  >>>isinstance(test,myClass)


  True12345678910111213141516171234567891011121314151617


  type()与isinstance()的区别:


  共同点:两者都可以判断对象类型


  不同点:对于一个class类的子类对象类型判断,type就不行了,而isinstance可以。


  例如:


  classA:


  pass


  classB(A):


  pass


  isinstance(A(),A)#returnsTrue


  type(A())==A#returnsTrue


  isinstance(B(),A)#returnsTrue


  type(B())==A#returnsFalse1234567891012345678910


  综上,推荐使用isinstance判断对象类型。


  详谈Java中instanceof和isInstance的区别


  对象instanceof类


  objinstanceofclass


  如果classobj1=obj成立的话,返回true,否则返回false


  类.isInstance(对象)


  class.isInstance(obj)


  如果classobj1=obj成立的话,返回true,否则返回false

  • 本文来自: 老铁博客,转载请保留出处!欢迎发表您的评论
  • 相关标签:
  • 已有0位网友发表了一针见血的评论,你还等什么?

    必填

    选填

    记住我,下次回复时不用重新输入个人信息

    必填,不填不让过哦,嘻嘻。

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

    相关推荐