zoukankan      html  css  js  c++  java
  • python基础数据类型2

    python基础数据类型2

    part6

    代码块:

    1. 代码块:我们所有的代码都需要依赖代码块来执行

    2. 一个文件就是一个代码块

    3. 交互式命令下一行就是一个代码块

    • 两个机制:

    • 同一个代码块下有一个机制,不同代码块下有例外一个机制

    1. 前提条件:同一个代码块下

    2. Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其重用。(目的:节省内存,提升性能)

    3. 适用的对象:int(float),str,bool.(包括元组tuple)

    4. 具体细则:所有的数字,bool,几乎所有的字符串

    不同代码块下的缓存机制:小数据池

    1. 前提条件:不同代码块

    2. 就是将~5-256的整数,和一定规则的字符串,放在一个‘池’(容器,或者字典)中

    3. 适用对象:int(float),str,bool(不包括元组)

    4. 具体细则:-5~256数字,bool,满足规则的字符串

    5. 优点:提升性能,节省内存

    集合(set),枚举:

    1. 容器型数据类型,他要求它里面的元素是不可变的数据,但是它本身是可变的数据类型。集合是无序的。{}

    2. 集合的作用:

    3. 列表的去重(因为他的底层是用c写的)

    4. 关系测试:交集,并集,差集,。。

    3.集合的创建:
    
    1.方式1:set1=set({1,3,'Barry',False})
    
    2.方式2直接创建:set1={1,3,4,'Barry',False,'哈哈'}
    
    4.集合的增:1.add()2.update()迭代着增加
    
    5.删:1.remove()按照元素删除2.pop()随机删除
    
    1. 集合的其他操作:
    #1.交集
    
    #print(set1.intersection(set2))
    
    #2.并集
    
    #print(set1.union(set2))
    
    #3.差集
    
    #print(set1.difference(set2))
    
    #4.反交集
    
    #print(set1.symmetric_difference(set2))
    
    #5.子集
    
    #set1={1,2,3}
    
    #set2={1,2,3,4,5,6}
    
    #print(set1<set2)
    
    #6.超集
    
    #print(set2>set1)
    
    1. 补充:枚举类型:对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值。
    li = ['alex','银角','女神','egon','太白']
    for i in enumerate(li):
        print(i)  #(0, 'alex')  (1, '银角')  (2, '女神')  (3, 'egon')  (4, '太白')
    
    
    for index,name in enumerate(li,1):   #元组拆包
        print(index,name)
    for index, name in enumerate(li, 100):  # 起始位置默认是0,可更改
        print(index, name)
    

    深浅copy:

    • 浅copy:list/dict:嵌套的可变数据类型是同一个

    • 深copy:list/dict:嵌套的可变数据类型不是同一个

    1. 浅copy:对于浅copy来说,只是在内存中重新创建了开辟了一个空间存放一个新列表(存放元素的地址),但是新列表中的元素与原列表中的元素是公用的。

    2. 深copy:对于深copy来说,列表是在内存中重新创建的,列表中可变的数据类型是重新创建的,列表中的不可变的数据类型是公用的。

    part7:

    基础数据类型补充:

    str:
    s1='taiBAi'
    
    1.capitalize()首字母大写,其余变小写
    
    2.swapcase()大小写翻转
    
    3.title()每个首字母大写(只要是以非字母元素隔开)
    
    4.center()居中:例如print(s1.center(20,'*'))
    
    5.find()根据元素找到索引,找到就返回,找不到就返回-1
    
    index()根据元素找到索引,找到就返回,找不到就报错
    
    tuple:
    
    1.元组中如果只有一个元素,并且没有逗号,那么他不是元组,他与该元素的数据类型一致***
    2.count()计数
    
    • list:
    1.count()pass
    
    2.index()pass
    
    3.sort()对原列表进行排序默认从小到大当l1.sort(reverse=True)时,从大到小**
    
    4.reverse()反转**
    
    5.+列表相加返回一个新的列表
    
    6.*列表相乘返回一个新的列表
    
    7.在循环一个列表时的过程中,如果你要改变列表的大小(增加值,或者删除值),那么结果很可能会出错或者报错。
    
    • dict:
    1.update()***有则覆盖,无则更新
    
    dic={'name':'张三','age':18}
    
    1.dic.update(hobby='运动',high='175')
    
    2.dic.update([(1,'a'),(2,'b'),(3,'c'),(4,'d')])#面试会考
    
    dic2={"name":"alex","weight":75}
    
    3.dic.update(dic2)
    
    2.fromkeys()来自键
    
    1. 在循环一个字典的过程中,不要改变字典的大小(增,删字典的元素),这样会直接报错。

    编码的进阶

    • A:英文:
    str:'hello'
    
    内存中表现方式:Unicode
    
    表现形式:'hello'
    
    bytes:
    
    内存中表现方式:非Unicode
    
    表现形式:b'hello'
    
    • B:中文:
    str:'中国'
    
    内存中表现方式:Unicode
    
    表现形式:'中国'
    bytes:
    
    内存中表现方式:非Unicode(utf-8)
    
    表现形式:b'xe4xb8xadxe5x9bxbd'
    
    str-->bytes
    
    s1='中国'
    
    b1=s1.encode('utf-8')#encode()编码
    
    print(b1,type(b1))
    
    bytes-->str
    
    b1=b'xe4xb8xadxe5x9bxbd'
    
    s2=b1.decode('utf-8')#decode()解码
    
    print(s2)
    
    gbk-->utf-8(需要借助Unicode进行转换)
    
    b1=b'xd6xd0xb9xfa'
    
    s=b1.decode('gbk')
    
    print(s)
    
    b2=s.encode('utf-8')
    
    print(b2)
    

    part8:

    文件操作:

    • 文件操作三部曲:
    1.打开文件
    
    2.对文件句柄进行相应的操作
    
    3.关闭文件
    
    f1=open('d:python文件操作初始.txt',mode='r',encoding='utf-8')
    
    content=f1.read()
    
    print(content)
    
    f1.close()
    
    1.文件操作的读:r,rb,r+,r+b四种模式(前两种常用)
    
    A:mode='r'(r模式可以省略)
    
    1.read()全读出来**
    
    2.read(n)按照字符读取
    
    3.readline(n)按照行读取
    
    4.readlines()返回一个列表,列表中的每个元素是原文件的每一行
    
    5.for循环读取***(f1在内存中只占一行,当访问下一行时,上一行消失)
    
    f1=open('文件的读',mode='r',encoding='utf-8')
    
    for line in f1:
    
    print(line)
    
    f1.close()
    
    B:mode='rb':操作的是非文本的文件,图片,视频,音频  rb模式打开不用encoding
    
    f=open('汽车.jpg',mode='rb')
    
    content=f.read()
    
    print(content)
    
    f.close()
    

    文件操作的写/追加/其他方式

    • 文件的写:w,wb,w+,w+b四种模式(前两种重要)
    1. 没有文件,创建文件写入内容
    f=open('文件的写',mode='w',encoding='utf-8')
    
    f.write('随便写一点')
    
    f.close()
    
    1. 如果文件存在,先清空原文件内容,再写入新的内容

    2. wb模式

    文件操作的追加:mode=a,ab,a+,a+b

    1. 没有文件,创建文件,追加文件

    2. 有文件,追加

    3. 读写mode='r+':先读后写(本质:读并追加)/顺序不能错

    f=open('文件的读写',mode='r+',encoding='utf-8')
    
    content=f.read()
    
    print(content)
    
    f.write('人的一切痛苦,本质都是对自己无能的愤怒')
    
    f.close()
    

    文件操作的其他功能/打开文件的例一种操作

    1.tell()获取光标的位置单位:字节
    
    f=open('文件的读写',encoding='utf-8')
    
    print(f.tell())
    
    content=f.read()
    
    print(f.tell())
    
    f.close()
    
    2.seek(n)seek(0)开头,seek(0,2)最后
    	调整光标位置单位:字节
    	应用:网络并发时的断点续传
    
    3.flush()强制刷新(相当于ctrl+s保存文件)
    

    打开文件的例一种操作

    • 优点1:不用手动关闭文件句柄

    • 优点2:一个位置操作多个open(换行)

    withopen('文件的读',encoding='utf-8')asf1,
    
    open('文件的写',encoding='utf-8',mode='w')asf2:
    
    print(f1.read())
    
    f2.write('2455hashduay')
    

    文件的改操作:

    • 步骤:
    1.以读的模式打开原文件
    
    2.以写的模式创建一个新的文件
    
    3.将原文件的内容读出来修改成新内容,写入新的文件
    
    4.将原文件删除
    
    5.将新文件重命名成原文件
    
    • low版本
    import    os
    
    withopen('alex自述',encoding='utf-8')asf1,
    
    open('alex自述.bak',mode='w',encoding='utf-8')asf2:
    
    old_content=f1.read()
    
    new_content=old_content.replace('alex','SB')
    
    f2.write(new_content)
    
    os.remove('alex自述')
    
    os.rename('alex自述.bak','alex自述')
    
    • 进阶版:
    import    os
    
    withopen('alex自述',encoding='utf-8')asf1,
    
    open('alex自述.bak',mode='w',encoding='utf-8')asf2:
    
    for line in f1:
    
    new_line=line.replace('SB','alex')
    
    f2.write(new_line)
    
    os.remove('alex自述')
    
    os.rename('alex自述.bak','alex自述')
    
  • 相关阅读:
    jsp、js分页功能的简单总结
    jsp实现验证码
    JSP内置对象总结
    java集合类总结二
    工程一:记事本的实现
    学编程上这些网站就够了
    一位程序员和他的程序员老婆分手了,原因竟是…
    培训机构出来的程序员为何不受企业待见?
    在w3cschool学完html,css,javascript,jquery以后,还是不会做前端怎么办?
    我只是个写代码的(幽默一下)
  • 原文地址:https://www.cnblogs.com/zranguai/p/13605243.html
Copyright © 2011-2022 走看看