集合、深浅拷贝、文件操作(读、写、追加)函数初识(参数)
小数据池
#int
==比较数值
is 比较内存地址
id 测试内存地址
#str
不能含有特俗字符
单个元素*数字,不能超过21
i1 = ‘a’*20
i = ‘a’*20
id一样
i1 = ‘a’*21
i = ‘a’*21
id不一样
编码
ascii 英文的数字,字母,特殊字符
字节 8位表示一个字节
字符 内容的最小组成单位
abc a一个字符
中国 中 一个字符
unicode :万国码
期初 两个字节,表示一个字符2**16不够用
升级 四个字节,表示一个字符2**32够了
utf-8 最少用8位,表示一个字符
a 用8位表示
欧洲 用16位表示
亚洲 用24位表示 3字节
gbk 国标
包含英文和中文
中文用个字节表示
1.不同编码之间的二进制不能互相识别
2.对于文件的存储,及传输不能是unicode编码
python3x
int
bool
bytes:内部编码方式(非unicode,可能是utf-8,国标,根本2312.。。。)
str:内部编码方式为unicode。不能用户发送及存储
list
dict
tuple
str和bytes的区别
字母
str:表现形式:alex
内部编码:unicode
bytes:表现形式:s2 = b'alex'
内部编码:非unicode
中文
str:表现形式:’中国‘
内部编码:unicode
bytes:表现形式:s2 = b'\xe4\xb8\xad\xe5'
内部编码:非unicode
编码
所有编码到uniconde都是decode
反之都是encode
集合
1.集合 要求它里面的数据元素,可哈希的,元素不重复,无序
本身是不可哈希的
set1 = {}
1.关系测试
2.去重
l1 = [1,1,2,2,3,4,5]
print(list(set(s1)
)
set1 = {'alex','wusir','egon',}
增
set1.add('文州')
set.update('abc') PS:迭代增加
删:
set1.pop() 随机删除
set.remove('alex') 按照元素删除
set1.clear 清空集合
del set1 删除整个集合
查:
for i in set1:
print(1)
关系测试:
set1 = {1234}
set2 = {2345}
交集
print(set & set2 )
print(set.intersection(set2))
并集
print(set1 | set2)
print(set1.union(set2))
差集 (求set里独有的元素)
print(set1 - set2)
print(set1 difference set2)
反交集 (不是交集,为反交集)
print(set1 ^ set2)
print(set1.symmetric_difference(set2))
父子集 (包含为超级,小为子集)
set1 = {1,2,3}
set2 = {1,2,3,4,5,6}
print(set1 > set2)
True
print(set1.isubset(set2))
冻集
set1 = {1,2,3}
print(frozenset(set1))
深浅拷贝
浅copy 第一层,各自独立。从第二层开始,公用一个内存地址
s1 = [1,2,3]
s2 = s1.copy[]
s1.append(666)
print(s1,s2)
s1 = [1,2,3[11,22]]
s2 = s1.copy[]
s1[-1].append(666)
print(s1,s2)
深copy 深copy无论多少次,都是互相独立的。互不影响
import copy
s1 = [1,2,3[11,22]]
s2 = s1.deepcopy[s1]
s1.append(666)
print(s1,s2)
文件操作
f1 = open('d:\xx.txt',encoding='utf-8',mode='r')
print(f1.read())
f1 文件句柄
open()调用的内置函数,内置函数调用的系统内部的open
一切对文件进行的操作都是基于文件句柄f1
执行流程:打开文件-->产生文件句柄-->对文件句柄进行操作-->关闭文件句柄
报错原因:
编码问题
File "D:/pycharm/day3/a.py", line 5, in <module>
print(f1.read())
File "D:\python\lib\codecs.py", line 322, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc4 in position 39: invalid continuation byte
编码不一致
路径错误
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
解决方法
在 路径最前面加个r
读:
r
1、read()全读出来
2、read(n)读一部分。n为读取指定多少字符
3、readline()按行读取
4、readlines()读取多行,放在列表里
5、for循环读取
for x in f1:
print(x)
f1.close()
rb
f1 = open('1.jpg',mode='rb')
print(f1.read)
f1.close
rb的raad(n)n为字节
r+
r+读写模式
r+b
(涉及到b的,是bytes类型。都是非文字类型的文件,如电影,音乐)
写:
f1 = open('log2',encoding='utf-8',mode='w')
w
没有文件,创建文件也要写入。
有源文件,先清空内容,后写入内容
wb
w+ 写读模式,替换的是字节
f1.seek(0) #调整光标到最前面
(0,2) #调整到末尾
w+b
追加:
a 没有文件,创建文件写入
有源文件,后面追加
f1 = open('账号密码',encoding='utf-8','mode='a')
f1.write('太白')
f1.close
ab
a+
a+b
其他操作方法
readable 是否可读
writable 是否可写
tell 告诉光标具体在哪
seek 调整光标的位置
(0,2)调整到末尾
truncate
只能在a或者在a+模式下使用的truncate
按照字节对源文件截取
with open('d:\xx.txt',encodint='utf-8',mode='r')as f1,:
print(f1.read)
在一定的时间内,自动关闭
能用一条语句,操作多个open
文件的改
1.以读模式打开源文件
2.以写的模式打开一个新文件
3.将源文件内容读出,按照要求修改,将修改后的内容,写入新文件
4.删除源文件
5.将新文件重命名源文件
函数
初识函数
def 函数名():
函数体
函数执行:函数名()
函数以功能为导向
函数名()
return
1.终止函数
2.给函数的执行者返回值
return 或者 return none
多个值,返回元组
3.
函数的传参
1.形参角度
1.位置参数 与实参的位置参数一一对应
2.默认参数 默认参数要在位置参数后面,括号里面加入参数为默认参数
3.动态参数 传入的参数不固定,用动态参数
*args 接受所有的位置参数,放在元组中
**kwargs 接受所有的关键字参数,放在字典里
#函数定义的时候,*代表聚合
#函数执行的时候,*代表打散,放到一起
字典用两颗星**
形参先后顺序:位置参数-->*args-->默认参数-->**kwargs
2。实参角度
1.位置参数 按顺序一一对应
2.关键字传参 参数一一对应
3.混合传参(位置参数,关键字参数)
关键字参数必须在位置参数后面
条件简单,切结果简单。可以用三元运算