精华内容
下载资源
问答
  • Python数据类型判断

    2019-12-27 00:00:22
    (一)直接判断输入数据类型: Type() 举例: 结果为: (二)判断字符串类型: 此处引用:https://www.cnblogs.com/ListenWind/p/4624476.html 在str为字符串的情况下: str.isalnum() 所有字符都是...

    (一)直接判断输入数据类型:

    Type()

    举例:

    结果为:

    (二)判断字符串类型:

    此处引用:https://www.cnblogs.com/ListenWind/p/4624476.html

     

    在str为字符串的情况下:

    str.isalnum() 所有字符都是数字或者字母(不区分大小写)

    str.isalpha() 所有字符都是字母(不区分大小写)

    str.isdigit() 所有字符都是数字

    str.islower() 所有字符都是小写

    str.isupper() 所有字符都是大写

    str.istitle() 所有单词都是首字母大写,像标题

    str.isspace() 所有字符都是空白字符、\t、\n、\r

    返回的结果将为 TRUE OR 报错

     

    举例:

     

    判断字符str是否是浮点类型:(用正则示例)

    正则表达式解释:

    ^[-+]?[0-9]+\.[0-9]+$

    ^表示以这个字符开头,也就是以[-+]开头,[-+]表示字符-或者+之一,

    ?表示0个或1个,也就是说符号是可选的。

    同理[0-9]表示0到9的一个数字,+表示1个或多个,也就是整数部分。

    \.表示的是小数点,\是转义字符因为.是特殊符号(匹配任意单个除\r\n之外的字符),

    所以需要转义。

    小数部分同理,$表示字符串以此结尾。

     

    (三)isdigital,ismumerical,isdecimal的区别

    此处引用他人,忘记了来处,在此备注

     

    测试代码如下:

    num = ['1', '1', 'Ⅷ', '一', b'50']

     

    decimal = [i for i in num[:4] if i.isdecimal()]     # 仅单字节、双字节数字,byte数字报错

    digital = [i for i in num if i.isdigit()]           # 非汉子

    numeric = [i for i in num[:4] if i.isnumeric()]     # byte数字报错

     

    print(decimal,digital,numeric, sep='\n')

     

    运行结果如下:

    ['1', '1']

    ['1', '1', b'50']

    ['1', '1', 'Ⅷ', '一']

     

    结论如下:

        1. isdigital()      --- 除汉子外

        2. isnumeric()   --- byte数字

        3. isdecimal()    --- 仅单、双字节数字

     

    展开全文
  • 主要介绍了python数据类型判断type与isinstance的区别实例解析,具有一定参考价值,需要的朋友可以了解下。
  • 下面小编就为大家带来一篇浅谈Python数据类型判断及列表脚本操作。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • python判断变量数据类型时,建议使用isinstance()方法代替type(). 进行类型检查首先想到的就是用type(),但是Type在某些特定情况下判断类型存在问题,今天就来说下type在python类型判断时的坑。 type()方法 例子: ...

    python判断变量数据类型时,建议使用isinstance()方法代替type(). 进行类型检查首先想到的就是用type(),但是Type在某些特定情况下判断类型存在问题,今天就来说下type在python类型判断时的坑。

    type()方法

    例子: int类型判断

    >>> import types
    >>> type(2017)==types.IntType
    True
    

    Python2.7中的types类型:

    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.x中的types类型:

    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
    

    Python3.x进行了类型的精简

    isinstance方法

    isinstance(object, classinfo)
    

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

    基本用法

    >>> isinstance(1, int)
    True
    >>> 
    >>> isinstance('pythontab.com', (str, int)) # 是其中一种即可
    True
    >>> isinstance(100, (str, int)) # 是其中一种即可
    True
    

    上面type的例子可以表示为:

    >>> import types
    >>> isinstance(2017int)
    True
    

    那为什么不推荐使用type进行类型检查呢?

    我们来看一下下面的例子。

    import types
    class UserInt(int):
        def __init__(self, val=0):
            self.val = int(val)
    i = 1
    n = UserInt(2)
    print(type(i) is type(n))
    

    上面的代码输出:False

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

    class ca:
        pass
    class cb:
        pass
    a = ca()
    b = cb()
    print (type(a) is type(b))
    

    代码的输出结果: True

    注意: 这个例子仅仅针对Python2.x版本, Python3.x版本中会返回Flase,不存在该问题

    type比较的结果a和b的类型是一样的,结果明显是不准确的。在old-style class中,任意instance的type都是’instance’。所以绝对不能用type来判断其类型。

    另外这个问题又与Python的思想有关,正常情况下不应该编写代码检查类型的,而应该直接假设被操作的instance具有你希望的属性,否则抛出异常。即使需要检查类型,也应该用isinstance来判断,这样你期望类型的subclass也能正常被处理(比如,一个函数需要处理Message类型,那么它应该也能处理Message的子类型MyMessage,所以应该使用isinstance(arg,Message)这样来判断而不是type(arg) == Message来判断)

    结论:

    尽量不要使用type()方法,多使用isinstance(),这样可以减少错误。

    展开全文
  • 数据类型判断python(版本3.0以上)使用变量,并进行值比较时。有时候会出现以下错误: TypeError: unorderable types: NoneType() < int() 或者类似的类型错误。 这是因为一方变量的数据类型不明(python...

    数据类型判断

    在python(版本3.0以上)使用变量,并进行值比较时。有时候会出现以下错误:

    TypeError: unorderable types: NoneType() < int()
    

    或者类似的类型错误。
    这是因为一方变量的数据类型不明(python无法判断),所以出错。
    在一般情况下,可以提前对要使用的变量进行定义并赋值,例如:var=’ ’ 或者 var=0等等。
    但是,若变量在比较前,是通过调用函数或者其他表达式赋值的,以上方法可能行不通,因为如果调用的函数如果存在错误或者没有输出或者输出类型不对,都会出现类型错误。
    所以可以在比较之前进行变量的类型判断,格式:

     import types
     type(x) is types.IntType
    

    或者

     type(x) is types.StringType
    

    以上是判断变量的数据类型是整形还是字符串类型。使用判断语句,如果数据类型正确,则进行变量比较。

     if type(x) is types.IntType:
     var1<var2
    

    建议出现此错误时,先查看自己的程序的每一步是否出错。
    列表脚本操作
    列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。
    在这里插入图片描述
    对于组合操作,还可以进行以下操作得到:

     a=[]
     b=[1,2,3,4,5,6,7,8,9,0]
     a.append(b[i:j]+b[j+1:k]+[b[k+1]-m])
    

    如下实例

     b=[]
     a=[1,2,3,4,5]
     b.append(a[0:2]+[a[2]-1])
     b
     [[1,2,2]]
    

    在这个程序中加号+两边任然是列表类型数据,所以是组合操作。
    而以下操作中,加号+前一个是列表,后一个是单一的数,类型不一致,所以出错。

     b=[]
     a=[1,2,3,4,5]
     b.append(a[0:2]+a[2])
     Traceback (most recent call last):
     File "<pyshell#91>",line 1, in <module>
     b.append(a[0:2]+a[2])
     TyoeError: can only concatenate list (not "int") to list​
    

    对于单一的数值,可以通过添加 [ ] 使其变为列表类型,即 [a[2]]。
    对于字符串的操作与以上是一样的。
    这种操作可以用在循环中,作为动态数存储于读取使用。
    注意
    以下的操作以以上的操作不一样,以下操作是对数的加法运算。

     a.append(b[i]+b[j])
    
    展开全文
  • 在项目中,我们会在每个接口验证客户端传过来的参数类型,如果验证不通过,返回给客户端“参数错误”错误码。 这样做不但便于调试,而且增加健壮性。因为客户端是可以作弊的,不要轻易相信客户端传过来的参数。 验证...

    在项目中,我们会在每个接口验证客户端传过来的参数类型,如果验证不通过,返回给客户端“参数错误”错误码。
    这样做不但便于调试,而且增加健壮性。因为客户端是可以作弊的,不要轻易相信客户端传过来的参数。
    验证类型用type函数,非常好用,比如

    >>type('foo') == str
    
    True
    
    >>type(2.3) in (int,float)
    
    True
    

    既然有了type()来判断类型,为什么还有isinstance()呢?
    一个明显的区别是在判断子类。
    type()不会认为子类是一种父类类型。
    isinstance()会认为子类是一种父类类型。
    千言不如一码。

    
    ```handlebars
    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
    

    需要注意的是,旧式类跟新式类的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更好。只有哪个更适合需求。
    
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,774
精华内容 1,509
关键字:

python数据类型判断

python 订阅