• python数据类型


    1、介绍

    (1)弱数据

    python是一门解释型语言,其数据类型为弱数据类型,即不通过直接声明,而是由赋值来确定变量的数据类型

    (2)python的数据类型声明

    通过一个:符号,可以对一个已经赋值的或者未赋值的变量名声明其数据类型,该操作不影响程序的执行,没有声明、赋值的作用,只是为后续的代码起一个代码提示的功能。可以出现在:主要用在方法或者函数传递参数时,对形参进行类型强调

    class xx():
    	a:str
    	def fun(b:int=15):pass
    		c:list
            d:student
            e='xx'
            e:int
    

    (2)变量名与字面量

    =左边的为变量名,注意其最好不要与关键字以及函数名重名,避免可能的执行异常或者代码提示异常,可以在变量名末尾追加一个下划线符号做区分

    =右边的为字面量,常见的有数字、字符串和其它数据结构

    None是一个特殊字母量,表示为空,即不指向任何地址或者值

    (3)重要函数

    • len:确定字符串、字典、列表等数组类对象的长度
    • id:确定对象的地址
    • type:确定对象的类型
    • isinstance(x, class)函数用于查询变量x的类型是否是class或者其子类型

    2、Number数字

    (1)定义

    支持int、float、bool和complex(复数)四种子类型

    a = 0x11	# 十六进制
    b = 0o11	# 八进制
    c = 0b11	# 二进制
    
    • 所有的整数的类型为int,可以通过二进制、八进制、十进制数、十六进制为int类型赋值,涉及的字母大小写均可
    print(1e1)	# 10.0
    print(1e0)	# 1.0
    print(0e1)	# 0.0
    print(2.e1)	# 20.0
    print(2.2e1)	# 22.0
    
    • 所有的小数的类型为float,可以通过十进制数或者科学计数法(必为浮点数数)赋值
    • bool的值为True或者False,大小写敏感。bool类型参与数值运算时,True和False分别可以替换为0和1。非空对象、非''字符串、非0数值、非空集合通过bool函数强转,或者在if等条件表达的位置可以自动转换为True,否者转为False。
    print(5+3j)	# (5+3j)
    print(3.2j)	# 3.2j
    print(0.j)	# 0j
    # 5+j形式会报错
    
    • complex的形式为aj+b,a必须存在

    (2)运算符

    算术运算符

    比较运算符

    逻辑运算符

    赋值运算符

    位运算符和位移运算符

    注意:

    • 没有++和--,也没有?:运算
    • a**b表示a的b次方
    • /表示返回浮点数、//表示向下取整,也就是向比它小的整数取整
    • 逻辑运算符采用and、or和not三个关键字,而非&&、||和!
    if 4>3 or list(a)[2]:
        print('ok')
    
    • and和or遵循短路

    3、Str字符串

    (1)定义

    s1 = 'c'
    s2 = 'abc'
    s3 = '''张三,
    来了,
    又走了'''
    s5 = '新世纪,\n你好\u6666,你好'
    s5 = r'新世纪,\n你好\u6666,你好'
    
    • 在python中没有直接的字符类型,单字符可以视为长度为1的字符串

    • 单行字符串由一对单引号或者一对双引号包围表示,多行字符串由一对三单引号或者一对三双引号包围表示

    • 转义字符,由\进行转义提示,用于表示某些无法或者不方便直接表示的字符。在整个字符串前面加r,字符串将不发生转义

    • unicode字符,实际是一种特殊的转义字符,由\uxxxx进行转义引起。也遵循加r不转义

    (2)索引和索引操作

    python中的包括字符串在内的所有集合类型都支持两种索引:

    • 正向索引,从左往右,从0递增
    • 反向索引,从右往左,从-1递减

    截取(一个参数):

    s[n]
    
    • n可以为一个正向的或者反向的索引,表示获取单个字符
    • n超出取值范围会抛出“IndexError: string index out of range”异常

    截取(两个参数):

    s[m:n]
    s[m:]
    s[:n]
    s[:]
    
    • m和n分别表示开始索引和结束索引,遵循左开右闭取值
    • m和n可以都为正向索引,或者都为反向索引,也可以一个为正向另一个为反向索引。
    • m索引表示的字符必须在n索引表示的左边,否则返回''
    • 如果开始索引超出取值范围或者未定义,则截取结束索引左边的字符串。如果结束索引超出取值范围或者未定义,则截取开始索引及左边的字符串。如果开始索引和结束索引都超出或者未定义,则表示截取整个的字符串

    截取(三个参数)

    s[m:n:t]
    
    • t表示递增取值,默认为1,表示连续取值

    拼接:

    通过+运算符可以实现字符串之间的拼接,但是字符串不能与非字符串的类型直接拼接,必须对其它类型使用str()函数转换

    复制:

    通过*运算符可以实现字符的复制,其后的数字指定复制的次数

    s1 = 'abc'
    s2 = ',def'
    print(s1+s2)	# abc,def
    print(s1*2+s2*2)	# abcabc,def,def
    print((s1*2+s2)*2)	# abcabc,defabcabc,def
    

    是否包含:

    'a' in s
    'a' not in s
    
    • 通过关键字in判断元素是否在集合中,返回bool类型值

    (3)方法

    由于过多,详情见下方的附表1

    (4)格式化

    s = '%s,123'%('张三')
    print(s)
    
    • %格式化,如果只有一个参数,参数可以不用()包围
    s2 = f'hello,{123}'
    # s3 = f'{1+2=}'
    print(s2)
    
    • 参数可以是字面量、变量或者运算式

    (5)\n和\r

    \n:换行符,跳到下一行

    \r:回车,跳到当前行的首部

    • \r会占据一个字符长度
    f = open('ccc', mode='w', encoding='utf-8')
    f.write('abc\r\ncde\r\n')
    f.close()
    f = open('ccc',mode='r',encoding='utf-8')
    s = f.read()
    print(s, s.encode('utf-8'), len(s))
    f.close()
    
    • \r被写入文件时,会被替换为\n
    s = 'abc\r\ncde\n123'
    print(s, s.encode('utf-8'))
    
    • 在控制台输出时,\r\n和\n的效果一致
    s = 'abc5\rcde\n123'
    print(s, s.encode('utf-8'))
    
    • 在控制台输出时,\r的效果是对此行在其之前的内容清除,然后输出在其之后的内容

    4、Tuple元组

    (1)定义

    元组是一种集合类型,用一对()包围,其内元素用,分割

    tuple = tuple()
    tuple = ()
    
    • 可以通过以上两种方法创建一个空的元组
    tuple = (12,22)
    tuple = (12,False,'abc')
    tuple = (12,)
    tuple = (12,23,)
    

    元素的类型与list一致:

    • 列表中的元素类型可以相同,也可以是不同的
    • 列表中的元素可以是任意类型
    • 需要注意如果元组只有一个元素,为了与()的归纳表示区分,需要在元素之和加,符号
    • 如果元素不止一个,可以在最后一个元素后面加,符号,不影响

    (2)索引和索引操作

    元组的索引和截取与字符串、列表的使用一致

    通过+和*操作符可以实现列表的拼接和复制

    关键字in判断包含关系

    但元组和字符串一样不支持del关键字

    (3)方法

    (12,22).count(__value=22)
    (12,22,22).index(__value='100a',__start=0,__stop=100)
    
    • 元组本身只有这两个方法,即返回匹配次数和寻找索引

    5、List列表

    (1)定义

    列表是一种集合类型,用一对[]包围,其内元素用,分割

    li = list()
    li = []
    
    • 可以通过以上两种方法创建一个空的列表
    li = [123,22]
    li = [False, 123, '世界']
    li = [10,]
    
    • 列表中的元素类型可以相同,也可以是不同的
    • 列表中的元素可以是任意类型
    • 如果列表中的元素不为空,可以在最后一个元素后加,符号,不影响

    (2)索引和索引操作

    列表的索引和截取与字符串的一致,也支持in关键字

    li_1 = [1,2,3,4]
    li_2 = ['a','b','c']
    print(li_1*2+li_2*2)	# [1, 2, 3, 4, 1, 2, 3, 4, 'a', 'b', 'c', 'a', 'b', 'c']
    
    • 通过+和*操作符可以实现列表的拼接和复制
    li = [1,2,3,4,5,6,7,8,9]
    del li[0]
    del li[-2:]
    
    • 通过del关键字可以快速删除集合元素

    (3)方法

    1 list.append(obj) 在列表末尾添加新的对象
    2 list.count(obj) 统计某个元素在列表中出现的次数
    3 list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
    4 list.index(obj) 从列表中找出某个值第一个匹配项的索引位置
    5 list.insert(index, obj) 将对象插入列表
    6 [list.pop(index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
    7 list.remove(obj) 移除列表中某个值的第一个匹配项
    8 list.reverse() 反向列表中元素
    9 list.sort(cmp=None, key=None, reverse=False) 对原列表进行排序

    6、Set集合

    (1)定义

    集合是一种集合类型,用一对{}包围,其内元素用,分割

    set = set()
    
    • 创建一个空集合必须使用方法创建,因为{}用于创建空的字典
    set = set('abcdefg')	# set方法里的参数只能是字符串,将对其按字符进行拆分,{'b', 'e', 'c', 'd', 'f', 'g', 'a'}
    
    set = (12,22)
    set = (12,False,'abc')
    set = (12,)
    

    元素的类型与list一致:

    • 列表中的元素类型可以相同,也可以是不同的
    • 列表中的元素可以是任意类型
    • 如果元素不止一个,可以在最后一个元素后面加,符号,不影响
    • 集合中的元素会进行排序去重
    • set对数值的排序是从大到小

    set不支持[]索引,也不支持*和+运算符,对del关键字也不支持

    (2)集合运算

    这是set集合与其它集合进行区分的核心功能,支持差集、并集、交集和异或运算

    a = set('abracadabra')
    b = set('alacazam')
    print(a - b)     # a 和 b 的差集
    print(a | b)     # a 和 b 的并集
    print(a & b)     # a 和 b 的交集
    print(a ^ b)     # a 和 b 中不同时存在的元素
    

    (3)方法

    7、Dictionary字典

    (1)定义

    字典是一种集合类型,用一对{}包围,其内元素用,分割

    其元素是键值对形式,键与值用:符号分割,键:值。键必须是数字\字符串\元组类型,而值可以是任意类型。

    dict = dict()
    dict = {}
    
    • 可以通过以上两种方法创建一个空的字典
    dict = {1:'abc','abc':False,(12,22):110}
    dict = {1:'abc',}
    
    • 如果元素不止一个,可以在最后一个元素后面加,符号,不影响

    dict不支持[]索引,也不支持*和+运算符,对del关键字也不支持

    (2)索引和索引操作

    d = {'123':12,'123':24}
    
    • 字典会自动去重,键相同的元素只保留最后一个
    d['123']
    d[12]
    
    • 匹配键,返回值。如果没有对应键,会抛出KeyError异常
    d	# 输出字典本身
    d.keys()	# 获得所有的键
    d.values()	# 获得所有的值
    
    d.update({111:222})
    
    • 如果字典中存在键,则更新,如果不存在,则直接新增
    d.get('123')
    
    • 如果字典中存在键,则返回值,如果不存在,则返回None值

    (3)方法

    1 dict.clear() 删除字典内所有元素
    2 dict.copy() 返回一个字典的浅复制
    3 [dict.fromkeys(seq, val]) 创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
    4 dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
    5 dict.has_key(key) 如果键在字典dict里返回true,否则返回false
    6 dict.items() 以列表返回可遍历的(键, 值) 元组数组
    7 dict.keys() 以列表返回一个字典所有的键
    8 dict.setdefault(key, default=None) 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
    9 dict.update(dict2) 把字典dict2的键/值对更新到dict里
    10 dict.values() 以列表返回字典中的所有值
    11 [pop(key,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
    12 popitem() 返回并删除字典中的最后一对键和值。

    8、使用注意

    number、str、tuple这三种类型为不可变类型,也就是说不可直接对其元素进行增删改操作,如果值发生改变,实际是重新赋值。

    list、dict和set这三种类型为可变类型,也就是说可以对其进行元素的增删改操作,不影响对象的地址。

    list、dict和set的元素各自具有地址空间,元素的可变性由元素的自身类型决定。注意是先有元素对象自身的地址空间,再有可变对象的元素的索引指向值。

    在方法或者函数中的参数都是传递地址,对于不可变对象赋值或者修改,不影响实参的值。对于可变参数对象的赋值或者修改,会影响实参的值。

    9、bytes字节

    详情查看内建函数bytes

    (1)定义

    b_1 = b'\xe5\a1'
    
    • 直接声明
    b_2 = '世界,你好'.encode('utf-8')
    
    • 字符串编码
    b_3 = bytearray([12,22,10])
    b_4 = bytes([22,15])
    
    • 由整数数组转换

    (2)输出

    调用其decode进行解码

  • 相关阅读:
    逆向学习-内嵌补丁(洞穴代码)
    ubuntu下创建ftp用户,该用户只访问特定目录下的内容
    Ubuntu 14.04 FTP服务器--vsftpd的安装和配置
    Hdu 4223 Dynamic Programming?
    Hdu 3873 Invade the Mars
    Hdu 2025 查找最大元素
    Hdu 1520 Anniversary party
    Hdu 4283 You Are the One
    HTTP协议
    常用正则表达式
  • 原文地址:https://www.cnblogs.com/heibaimao123/p/16282777.html
Copyright © 2020-2023  润新知