Loading

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'\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)

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自述')
posted @ 2020-09-03 00:06  zranguai  阅读(95)  评论(0编辑  收藏  举报