python基础数据类型2

day06:

代码块:

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

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

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

2.两个机制:

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

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.集合的作用:

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

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

 

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()随机删除

6.集合的其他操作:

#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)

 

2.补充:枚举类型:对于一个可迭代的(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来说,列表是在内存中重新创建的,列表中可变的数据类型是重新创建的,列表中的不可变的数据类型是公用的。

day07:

基础数据类型补充:

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()来自键

3.在循环一个字典的过程中,不要改变字典的大小(增,删字典的元素),这样会直接报错。

编码的进阶

A:英文:

str:'hello'

内存中表现方式:Unicode

表现形式:'hello'

bytes:

内存中表现方式:非Unicode

表现形式:b'hello'

B:中文:

str:'中国'

内存中表现方式:Unicode

表现形式:'中国'

bytes:

内存中表现方式:非Unicode(utf-8)

表现形式:b'\xe4\xb8\xad\xe5\x9b\xbd'

 

str-->bytes

s1='中国'

b1=s1.encode('utf-8')#encode()编码

print(b1,type(b1))

bytes-->str

b1=b'\xe4\xb8\xad\xe5\x9b\xbd'

s2=b1.decode('utf-8')#decode()解码

print(s2)

 

gbk-->utf-8(需要借助Unicode进行转换)

b1=b'\xd6\xd0\xb9\xfa'

s=b1.decode('gbk')

print(s)

b2=s.encode('utf-8')

print(b2)

day08:

文件操作:

文件操作三部曲:

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()

1.文件的写:w,wb,w+,w+b四种模式(前两种重要)

1.没有文件,创建文件写入内容

f=open('文件的写',mode='w',encoding='utf-8')

f.write('随便写一点')

f.close()

2.如果文件存在,先清空原文件内容,再写入新的内容

3.wb模式

2.文件操作的追加: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()

打开文件的例一种操作

优点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自述')

 

 

2.seek(n)调整光标位置单位:字节

应用:网络并发时的断点续传

3.flush()强制刷新(相当于ctrl+s保存文件)

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值