Python数据类型详解

作者: 三十六_ | 来源:发表于2017-09-13 17:58 被阅读179次

    数值类型

    整数类型 int

    Python 3 之后,整数类型为 int ,不在区分整型与长整型,(Python2.x 中分别是 int 和 long 类型)整数的长度不在受限。我觉得这个特性实在方便,少去了其它语言处理溢出的步骤,记得以前学C语言的时候做ACM题的大数相乘废了不少力。

    # 不存在溢出问题,舒服
    >>> 55555555555555555555555 * 66666666666666666666666666666666666666
    3703703703703703703703666666666666666629629629629629629629630L
    
    #直接写下数值,默认十进制
    >>> 23
    23
    #前面加0b,二进制
    >>> 0b101010
    42
    #前面加0o,八进制
    >>> 0o15
    13
    #前面加0x,十六进制
    >>> 0x2F
    47
    >>> 
    

    如果想将字符串、浮点数、布尔值等类型装换为整数则使用强制转换函数 int() ,使用函数 oct()、hex() 将十进制返回对应进制的字符串。

    浮点类型 float

    想知道某个数据的类型使用 type() 函数:

    >>> type(3.14159)
    <type 'float'>
    #可以用科学计数法表示浮点类型
    >>> 1.234e-10
    1.234e-10
    >>> type(1.234e-10)
    <type 'float'>
    

    如果用个浮点字符串如'1.2345',想要将其转换为int类型,不能直接用int()函数,要先用float()函数转换为float,再转为int:

    >>> int(1.2345)
    1
    # 这样会报错
    >>> int('1.2345')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: '1.2345'
    >>> int(float('1.2345'))
    1
    
    布尔类型

    布尔类型只有两个值:True和False. 0为False,非0值都为True。将None、False、0、0.0、0j、''、()、[]、{} 等传给bool(),都会返回False,其他的为True。

    复数

    Python支持复数直接表示法,使用A+Bj的形式,是complex类的实例,可以直接运算:

    >>> 1 + 2j + 2 + 3j
    (3+5j)
    >>> 10 + 3j + 2 + 3j
    (12+6j)
    >>> 
    

    字符串类型

    Python中使用' '或" "来括住字符标明是一个字符串:

    >>> 'study python'
    'study python'
    >>> 'study "python"'
    'study "python"'
    # Python 自动将'\'视为'\\'
    >>> 'c:\windows'
    'c:\\windows'
    

    ''为转义字符,需要注意特殊情况(这里\t相当与Tab):

    >>> print('c:\tindows')
    c:  indows
    >>> print('c:\\tindows')
    c:\tindows
    >>> print('c:\\\tindows')
    c:\ indows
    >>> print('c:\\\\tindows')
    c:\\tindows
    

    可以看到这种写法有些不便,可以使用原生字符串Raw_String来表示,在字符串面前加上 r 就行:

    >>> print(r'c:\\tindows')
    c:\\tindows
    

    想让字符串包含换行缩进等格式时,使用三重引号'''或""":

    >>> '''This is a
    ... examplr'''
    'This is a\nexamplr'
    >>> print('''This is a
    ... example''')
    This is a
    example
    

    可以使用str()类将数值转换为字符串,使用ord()函数可以返回一个字符的Unicode编码,使用chr()函数则可以将Unicode编码转成一个字符:

    >>> str(21.321)
    '21.321'
    >>> ord('一')
    19968
    >>> chr(19968)
    '一'
    
    格式化字符串

    当指定多个字符串给print()函数时,默认的分隔符是空格,如果想要指定其他的字符,可以多指定一个sep参数:

    >>> name = 'JYH'
    >>> print('hello', name)
    hello JYH
    >>> print('hello', name, sep = ', ')
    hello, JYH
    >>> print('hello', name, end = '')
    hello JYH>>> 
    

    print()函数中默认输出换行,它有一个参数end,在指定的字符串输出后,end指定的字符才会被输出,可以用这个参数来控制是否换行。
    可以像C语言一样的在print中用'%'来控制格式,直接看案例:

    >>> '你好 %s' % 'JYH'
    '你好 JYH'
    >>> '%d + %f = %.3f' % (2, 3.14159, 2 + 3.14159)
    '2 + 3.141590 = 5.142'
    >>> '%5d + %5f = %2.3f' % (2, 3.14159, 2 + 3.14159)
    '    2 + 3.141590 = 5.142'
    

    旧的格式化麻烦且可读性不是很好,好在后面有了新的格式化方法:

    >>> '{} / {} = {}'.format(5, 7, 5/7)
    '5 / 7 = 0.7142857142857143'
    >>> '{1} / {0} = {2}'.format(7, 5, 5/7)
    '5 / 7 = 0.7142857142857143'
    >>> '{a} / {b} = {result}'.format(a = 5, b = 7, result = 5/7)
    '5 / 7 = 0.7142857142857143'
    

    占位符变成了{},可以用索引或者名称来指定参数,也可以指定数字的宽度与小数点位数以及补齐字符:

    >>> '{1:d} / {0:d} = {2:.2f}'.format(7, 5, 5/7)
    '5 / 7 = 0.71'
    >>> '{1:5d} / {0:10d} = {2:10.2f}'.format(7, 5, 5/7)
    '    5 /          7 =       0.71'
    #"<"用来左对齐,"^"前面的字符为补齐字符
    >>> '{1:>5d} / {0:<10d} = {2:0^10.2f}'.format(7, 5, 5/7)
    '    5 / 7          = 0000.71000'
    

    format()函数用很多用法,可以像使用索引一样获取列表的值、使用键名称获取字典的值还有引用模块中的名称以及格式化单个值:

    >>> array = ['a', 'b', 'c']
    >>> 'array has {a[0]}, {a[1]}, {a[2]}'.format(a = array)
    'array has a, b, c'
    >>> user = {'name' : 'JYH', 'eamil' : '123@qq.com'}
    >>> 'The name of user is {user[name]}'.format(user = user)
    'The name of user is JYH'
    >>> import sys
    >>> 'My system is {mac.platform}'.format(mac = sys)
    'My system is darwin'
    >>> format(1.234, '0^10.2f')
    '0001.23000'
    

    可以用len()函数获取字符串的长度,实用encode()方法可将字符串转为指定编码,用decode()方法解码,使用 in 来检测某字符是否在字符串中:

    >>> str = '字符串'
    >>> len(str)
    3
    >>> str.encode('UTF-8')
    b'\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2'
    >>> str.encode('UTF-8').decode('UTF-8')
    '字符串'
    >>> '符' in str
    True
    

    无论是Python2 还是 Python3 字符串一旦创建都是不可便变动的 immutable ,无法修改它的内容,不像OC还有mutableString。

    群集类型

    列表 list

    list,就相当于数组,有序,内容长度可变动,使用[]表示,每个元素用逗号','分开,下面展示了列表的一些常用方法:

    >>> list = [1, 2, 3, 4]
    # remove() 删除指定的元素值, del 删除索引位置的值
    >>> list.remove(2)
    >>> list
    [1, 3, 4]
    >>> del list[0]
    >>> list
    [3, 4]
    >>> list.extend([1 , 2])
    >>> list
    [3, 4, 1, 2]
    >>> list.pop()
    2
    >>> list
    [3, 4, 1]
    >>> list.append(2)
    >>> list
    [3, 4, 1, 2]
    >>> list.sort()
    >>> list
    [1, 2, 3, 4]
    >>> list.reverse()
    >>> list
    [4, 3, 2, 1]
    >>> 2 in list
    True
    

    可以从可迭代对象(如字符串、集合、元组)用 list() 直接创建一个列表:

    >>> list('abcde')
    ['a', 'b', 'c', 'd', 'e']
    >>> list({'a', 'b', 'c', 'c', 'b'})
    ['a', 'b', 'c']
    >>> list((1,2,3,4))
    [1, 2, 3, 4]
    
    集合 set

    集合的内容无序且不重复,使用{}包裹元素,使用逗号','分割,如果有重复的元素会被自动剔除。创建空集合必须使用set();,不能使用{},这会创建一个空字典:

    >>> shop = set()
    >>> shop.add('water')
    >>> shop.add('cake')
    >>> shop
    {'water', 'cake'}
    >>> shop.remove('water')
    >>> 'water' in shop
    False
    

    由于集合中的元素不能重复,所以并非所有元素都能加入集合中,只有可哈希hashable的对象能放进去,至于什么是可哈希看这里可哈希(hashable)与不可哈希(unhashable),还可以从其他可迭代的对象中创建集合:

    >>> set('fsafa')
    {'s', 'a', 'f'}
    >>> set([1,2,3,4])
    {1, 2, 3, 4}
    >>> set((1,2,3,4))
    {1, 2, 3, 4}
    
    字典 dict

    字典用来存储键值对,创建字典时,键不能重复,必须是 hashable :

    >>> user = {'name' : 'JYH', 'pwd' : 1234}
    >>> user['pwd']
    1234
    >>> user['emial'] = '1234@qq.com'
    >>> user
    {'name': 'JYH', 'pwd': 1234, 'emial': '1234@qq.com'}
    #其他创建字典的方式
    >>> user2 = dict(name = 'HJY', pwd = 5678, email = '5678@qq.com')
    >>> user2
    {'name': 'HJY', 'pwd': 5678, 'email': '5678@qq.com'}
    >>> user3 = dict([('name', '三十六'), ('pwd', 123321)])
    >>> user3
    {'name': '三十六', 'pwd': 123321}
    >>> user2.fromkeys(['name', 'pwd'], 'hahaha')
    {'name': 'hahaha', 'pwd': 'hahaha'}
    

    常用方法

    #方法                                  #描述  
    -------------------------------------------------------------------------------------------------  
    D.clear()                              #移除D中的所有项  
    D.copy()                               #返回D的副本  
    D.fromkeys(seq[],val])                  #返回从seq中获得的键和被设置为val的值的字典。可做类方法调用  
    D.get(key[],default])                   #如果D[key]存在,将其返回;否则返回给定的默认值None  
    D.has_key(key)                         #检查D是否有给定键key  
    D.items()                              #返回表示D项的(键,值)对列表  
    D.iteritems()                          #从D.items()返回的(键,值)对中返回一个可迭代的对象  
    D.iterkeys()                           #从D的键中返回一个可迭代对象  
    D.itervalues()                         #从D的值中返回一个可迭代对象  
    D.keys()                               #返回D键的列表  
    D.pop(key[],d])                         #移除并且返回对应给定键key或给定的默认值D的值  
    D.popitem()                            #从D中移除任意一项,并将其作为(键,值)对返回  
    D.setdefault(key[],default])            #如果D[key]存在则将其返回;否则返回默认值None  
    D.update(other)                        #将other中的每一项加入到D中。  
    D.values()                             #返回D中值的列表
    
    元组 tuple

    元组跟列表一样,都是有序结构,但不同的是,元组一旦创建之后无法变动,所以它是hashable 。创建元组只需要在某个值后面加一个逗号','即可:

    >>> 1,
    (1,)
    >>> 1, 2, 3,
    (1, 2, 3)
    >>> 1, 'a', True
    (1, 'a', True)
    >>> (1, 2, 3)
    (1, 2, 3)
    

    创建元组时,最后一个逗号可以省略(只包含一个元素的除外),通常加上()更直观的看出这是一个元组。

    元组的作用:
    可以返回一组相关的值,不用自己定义类型;可以当做不能修改的参数传递给函数,因为元组无法修改,如果函数中试图修改数据,那么就会报错,使得程序更加严谨,而且元组所占用的内存较小。
    元组其他用法:

    #拆解(unpack)
    >>> a = (1, 'a', True)
    >>> num, str, bool = a
    >>> num
    1
    >>> bool
    True
    
    #python3 新特性
    >>> a, *b , c = (1,2,3,4,5)
    >>> a
    1
    >>> b
    [2, 3, 4]
    >>> c
    5
    
    #交换两个变量的值,不像其它语言需要中间变量
    >>> a = 1
    >>> b = 2
    >>> a, b = b, a
    >>> a
    2
    >>> b
    1
    

    相关文章

      网友评论

        本文标题:Python数据类型详解

        本文链接:https://www.haomeiwen.com/subject/kahhsxtx.html