深copy和浅copy
- 浅copy有三种形式
import copy # 导包的前提
- namebak=copy.copy(name)
- namebak=name[:]
- namebak=list(name)
- 深copy
- namebak=copy.deepcopy(name)
元祖
- 元祖就两个方法 count index,只能查不能改
字典
- 字典是无序的
- key必须是唯一的,天生去重
- info.popitem()#随机删除一个
- info.pop()#必须制定删除谁
- info[key] 只有在key存在的情况下,才可以查找,不然会报错。安全一点方法:info.get(key),没有就返回None,有就返回对应的值。
- setdefault: info.setdefault(key,value) 如果字典里存在key那么不做修改,如果字典里不存在则添加一条
- update; info.update(b) # 两个字典合并,中间有key重叠则替换,没有就合并
- 《追风筝的人》
- 《白鹿原》
- 《林达看美国》
集合
- type 查看数据类型
- set() 集合是无序的,可以去重
- 交集(&):list_1.==intersection==(list_2)
- 并集(|):list_1.==union==(list_2)
- 差集(list_1-list_2):list_1.==difference==(list_2) 把list_1中属于list_2的元素去掉
- 对称差集(^):list_1.==symmetric_difference==(list_2) 把1中和2中都有的去掉后合并返回
- 子集:issubset 返回True或False
- 父集:issuperset 返回True或False
- isdisjoint 如果两个集合的交集为空,则返回True
- add 添加单个元素
- update 添加多个 list_1.update([1,2,3,4])
- remove 删除一个元素, discard也是删除一个元素, remove如果删除的元素不存在集合里会报错,discard不会
文件操作
- open: f = open(“geci”,encoding=”UTF-8”)#文件句柄
f = open("geci",encoding="UTF-8")# 文件句柄
data1 = f.read()
data2 = f.read()
print(data2)
此时的data2为空。原因是data1读完之后相当于此时的光标位于文件的最后面,再次读文件是,往下没有内容了,所以返回为空。
- “w”:f = open(“geci2”,”w”,encoding=”UTF-8”)相当于创建一个geci2新文件。只有写的没有读的权限
- “r”: 只有读没有写的权限
- “a”: 追加内容,此时不会覆盖原内容,没有读的权限
- tell():返回光标的位置
- seek():回到某个光标
- seekable():判断光标是否可移动,False True
- flush()
写文件的时候,写一点会暂时存放在一个缓存中,当缓存达到一定的数值,就会写入到硬盘中,flush的作用就是强制刷新,写入硬盘 - with语句
- 为了避免打开文件忘记关闭,可以用with打开
with open("geci_3", "w",encoding="utf-8") as f
等价于f=open(“geci2”,”r”,encoding=”utf-8”) - 可以打开多个文件 with open() as f1,with open() as f2
字符编码和转码
- Unicode 所有的中文和英文字符占两个字节
- ascii码 只能存英文和特殊字符,一个英文字符占一个字节,不能存中文
- utf-8 默认所有的英文字符按照ascii码存储,所有的中文字节统一3个字节
函数
- 函数式编程:只要输入是确定的输出就是确定的(公式化函数)
- 面向对象
- 面向过程:没有返回值的函数。
- 函数的返回值的个数>1的时候,返回的是元祖(所有返回值放到一个元祖里面)
- 位置参数和关键字参数:关键字参数不能位于位置参数前面,关键字参数位置可以互换。
- 含有默认参数的函数:调用的时候,默认参数可以不传 def text(x, y=2) 调用:text(2)
- **kwargs:将多个关键字参数转化成字典的key-value
- *args 接受N个位置参数
- 参数组一定要放在最后面
- 最大的递归999层 超过就报错。为了保护内存
装饰器
- 定义:本质是函数(装饰其他函数,就是为其他函数添加附加功能)
- 为了避免打开文件忘记关闭,可以用with打开
- 原则:
- 1.不能修改被装饰的函数源代码
- 2.不能修改被装饰的函数的调用方式
- 函数即是“变量”
- 高阶函数:
- 把一个函数名当作实参传给另外一个函数
- 返回值中包含函数名
- 高阶函数 + 嵌套函数 = 装饰器
生成器 generator
- 列表生成式 [i*2 for i in range(10)]
- 这种一边循环一边计算的机制,称为生成器
- 跟列表生成式的区别,是用到的时候才会生成相应的数据。列表是所有的都生成好了
- 只记录当前的位置,只有一个next()方法
- send() : 给yield传值
- 函数里有yield 就是个生成器
迭代器 Iterator
- 可以被next()函数调用并不断返回下一个值得对象称为迭代器
- 可以直接作用于for循环的对象统称为迭代对象Iterable
- 有next()方法就是迭代器
- 生成器肯定是迭代器
模块
- 定义:本质是.py结尾的python文件(文件名:test.py 对应的模块名test)
- 导入包的本质:就是执行该包下的init.py文件
- 时间戳:当前时间距离1970.1.1 0时0分 的秒数。
- time.gmtime() # 装换为UTC(标准时间)
- time.localtime() # 转换为本地时间
a= time.strftime("%Y-%m-%d %H:%M:%S", x)
print(a)
c = "2018-02-06 21:16"
b=time.strptime(c,"%Y-%m-%d %H:%M")
print(b)
- shelve 模块
是一个简单的kv将内存数据通过文件持久化的模块
import datetime
import shelve
file = shelve.open("shelve_test")
// name = ["Luys","JunZi","Zoe"]
// info = {"age":22,"j_age":18,"Z_age":[1,2,3]}
// file["name"] = name
// file["info"] = info
// file["date"] = datetime.datetime.now()
//------生成三个文件,不用管
print(file.get("name"))
print(file.get("info"))
print(file.get("date"))
file.close()
- shutil模块
- 高级的文件,文件夹,压缩包的处理模块(文件的copy)
- copyfileobj 将文件内容copy到另一个文件中,可以是部分内容。shutil.copyfileobj(f,df)
- copyfile 根据文件名,copy一个文件的内容到另一个文件里面。shutil.copyfile(“geci_3”,”geci_4”)(目标文件可不存在) 只copy内容
- copymode 仅copy权限。内容,组,用户均不copy
- copystat copy状态信息,不copy内容
- copy 拷贝文件内容和权限
- copytree copy目录
- rmtree() 删除目录
- shutil.make_archive(base_name,format,….)
- base_name:压缩文件名,可以传压缩包的路径
- format:压缩种类(zip,tar,bztar,gztar)
- roo_dir:要压缩的文件路径
- owner:用户,默认当前操作
- group:组
- logger:用于记录日记
- zipfile 模块
- 单个压缩文件
z = zipfile.ZipFile("Zoe.zip","w")
z.write("geci")
print("----")
z.write("geci_3")
z.close()