一。is , == , id() , 小数据池
1.is:内存地址比较,比较是否同一对象
2.== :数值比较,比较对象的内容
3.id():显示内存地址,获取对象的内存地址
4.小数据池:小数据对象池,再一定范围内的int/str组成,目的为了节省空间,存在于一个内存空间中
范围:int: -5 ~ 256之间
str: 不能含有特殊字符
单个元素 * 数值不能>=21
二。编码:
1.gbk与utf-8 中的 数字,字母 是互相识别的,因为使用的都是 ascii编码
2.不通编码之间的二进制是不能互相识别的(用什么字符集编码,就要用什么字符集解码)
3.杜宇文件的存储,传输不能是unicode码
4.py3中,str默认编码为unicode,不能存储或传输
其他(int,bool,list,dict,tpule) 都是utf-8 编码
5.bytes 为内部编码方式(非unicode)
与str 相同点:操作方法相同
不同点:编码不同
编码:s = '包子'
print(s.encode('utf-8')) #对于str进行编码,生成bytes类型 b'\xe5\x8c\x85\xe5\xad\x90'
解码 b = b'\xe5\x8c\x85\xe5\xad\x90'
print(b.decode('utf-8')) #对于bytes进行解码,生成str类型 包子
总结:1.gbk与utf-8 之间的转换都需要通过Unicode作为中间编码做转换
2.个人认为常用转码为 gbk转utf-8
b.decode('gbk').encode('utf-8')
先解码 再编码。 生成的还是一个用于存储或者传输的bytes类型
三。set 集合
1.set:无序的,且元素不重复的,集合本身不可哈希,里边的每个元素是可哈希的,
2.格式:set1 = {'baozi','xiaomi','dakun','baozi'} #baozi 自动去重
3.组成元素:int str bool tuple(均为不可变类型)
4.用途:数据关系测试
5.操作方法:增,删,查。(不可改,因为无序无索引)
增:set1.add('包子')
set1.update('abc') 迭代增加 'a','b','c'
删:set1.pop() 随机删除
set1.remove('元素') 按元素删除,如果元素不存在,会报错
set1.clear(). 清空后得到 set() ,为一个空集合
del set1 删除
查询:只能for循环进行查询
for i in set1:
print(i)
6.关系测试:
set1 = {1,2,3,4,5,}
set2 = {3,4,5,6,7,}
set3 = {3,4,5}
--交集: print(set1 & set2)
print(set1.intersection(set2)) #==> {3,4,5}
--并集:set1 | set2
set1.union(set2)
--差集:set1 - set2
set1.diffrernce(set2)
--反交集:set1 ^ set2
set1.symmetric_diffrernce(set2)
--子集:set1 > set2 #==> True
set2.issubset(set1) #==> True
--超级:set1.issupperset(se3) # 返回True/False
#====> True
不可变集合:frozenset(set1)
四。copy
1.浅copy:第一层各自独立,第二层开始共用同一个内存地址(值也相同).copy.copy()
#浅copy,copy的是一个列表,列表里的内容如果发生变化,值就发生变化,共享的同一个内存
l = [1,2,3,4,[11,22,33]]
l1 = copy.copy(l)
l[-1].append(44)
l.insert(0,88)
print(l1,l)
print(id(l1[-1]),id(l[-1])) #证明列表中包含的列表元素共享的是同一个内存地址
print(id(l1),id(l))
2.深copy :无论多少层,都是各自独立。copy.deepcopy()
# #深copy
l = [1,2,3,4,[11,22,33]]
l1 = copy.deepcopy(l)
l[-1].append(44)
print(l1,l)
print(id(l1[-1]),id(l[-1])) #深度copy列表里的列表元素是一个新的地址,
print(id(l1),id(l))
五。文件操作
1.文件操作的参数:
a.文件路径。 path ,使用r 开头,去空格,制表符,回车等
b.编码方式. encoding=''
c.打开方式. mode=''
2.句柄:一切对文件进行的操作都是基于文件句柄
f1 = open('path',encoding='utf-8',mode='r')
f1:文件句柄
open:调用内置函数,调用OS内部命令
常用:f1,file,file_hander,f_h
执行流程:打开文件,产生文件句柄
对文件句柄进行操作
关闭文件句柄
文件path前加r,去掉空格\n 等 :如r'/Applications/test/zfeng.txt'
3.读文件
f1 = open(r'/Applications/test/zfeng.txt',encoding='utf-8',mode='r')
a.read() 全部读取
b.read(n) r模式下,n表表字符的个数
rb模式下,n表示字节数
c.readline() 按行读取
d.readlines() 全堵,每行为一个元素,所有数据放在一个大列表里
for循环句柄,变量为迭代,占用少量内存,
f1 = open(r'/Applications/test/zfeng.txt',encoding='utf-8',mode='r')
for i in f1:
print(i)
f1.close()
4.写文件 write
f1 = open('path',encoding='utf-8',mode='w')
f1.write('包子,baozi')
f1.close()
原则:对不存在的文件,先创建文件,再写入
对已有文件,先清空,再写入(与mode=''写入方法相关)
f2 = open(r'/Applications/test/tp.png',mode='rb')
# nr = f2.read()
f3 = open(r'/Applications/test/tp1.png',mode='wb')
f3.write(f2.read())
f2.close()
f3.close()
5.追加写入 a
f1 = open(r'path',encoding='utf-8',mode='a')
f1.write('\n包子') #换行追加
原则:对不存在的文件,创建文件并写入,(可能是先有一个回车,验证:确实先有一个换行后写入)
对已经存在的文件,在最后一行追加写入
6.其他常用:
r+ 读+写
w+ 写+读
a+ 追加+读
7.其他操作方法:
f1.read() 全读
f1.readline() 读一行
f1.readlines() 全堵,每行为一个元素并加\n换行,放在一个列表里
f1.write() 写
f1.close() 关闭
f1.fileno() 返回一个整型的文件描述符
f1.flush() 强制刷新保存
f1.readable() 是否可读
f1.writeable() 是否可写
f1.seek() 调整光标位置,读取时使用 seek(0)头,seek(0,2)末尾
f1.tell() 返回光标位置,应该有换行符算一个位置
f1.truncate() 对源文件截取,只能在a,a+ 模式下使用,按字节截取
8.with open() as f1,\
open() as f2,\
open() as f3:
特点:主动关闭文件句柄
能用一条语句操作多个open
注意:with open()中再open()同一个文件进行读写操作时,可以主动关闭一个句柄
六。函数
1.因重复代码较多,以功能为导向,一个函数为了完成一个功能,可重复使用
2.格式:def my_len():
count = 0
for i in l:
count += 1
return count
def:定义函数
my_len:函数名
() :传参使用
其余:函数体
3.return ,结束函数,给函数执行者返回值
return / return None 什么都不返回
return 666。单个值,返回什么类型就得到什么类型
return '包子,zfeng,[11,22,33]' 多个值,以元组(tuple)返回
4.传参:
--实参:函数执行力放的参数,可应用,可改变
my_len(实参)
a.位置参数:与形参按顺序一一对应
b.关键参数:必须一一对应,不能少,可不按照顺序
def fun3(a,b,c,d):
fun3(a=1,c,5,d=3,b=2)
c.混合参数:包含位置参数和关键参数,关键参数必须值位置参数之后 fun3(1,2,d=2,c=5)
--形参:定义函数时,只能引用
def my_len(形参)
a.位置参数:与实参必须按顺序一一对应
b.默认参数:要做位置参数之后 def fun4(name,sex='男'):
c.动态参数:万能参数
def fun5(*args,**kwargs):
args :接收所有位置参数,------>行成元组 *打散所有位置参数
kwargs:接收所有关键参数,------>形成字典。 **打散所有关键参数
补充:*号,在函数定义时,代表聚合,
在函数执行时代表打散
--传参顺序:
位置参数> 默认参数> **wkargs
def fun6(a,b,*args,sex='男',**kwargs)
七。三元运算: 返回 值1 或者 值2 判断后赋值
格式:res = 值1 if 条件 else 值2
a = 1
b = 2
c = a if a > 1 else b
解读:如果a >1 则c=a 否则a=b
浙公网安备 33010602011771号