目录
系列文章目录
一. 高阶函数
二. os模块
三. 解归档
四. 类的实例化
五. 继承
六. 枚举类型
七. 异常处理
第一章:python常见报错及解决方案
第二章:编写python函数常用技巧代码(一)
第三章:编写python函数常用技巧代码(二)
注:func是功能函数的意思,不单指任一函数
1)map(func, 序列):
功能:将序列的每一项放入到func这个函数里执行相当于:[func(i) for i in 序列]
def square(x):
return x ** 2
temp = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list(map(square, temp)))
print(list(map(lambda x:x**2, temp)))
2)reduce(func, 序列):
功能:func函数 接收两个参数,将两个数结果累计然后继续与下一个元素结果累计的过程
res = reduce(add, [1,2, 3, 4, 5])
相当于:(((1+2)+3)+4)
from functools import reduce
def add(x, y) :
return x + y
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sum = reduce(add, list)
sum1 = reduce(lambda x, y: x+y, list)
print(sum)
print(sum1)
3)filter过滤:
filter(func,序列)
func需要一个参数 如果 func 返回 true 保留 否则剔除
def is_odd(n):
return n % 2 == 1
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
newlist = filter(is_odd, list)
newlist1 = filter(lambda x:x%2==1, list)
print(newlist)
print(*newlist)
print(*newlist1)
注:
关于filter()方法,,python3和python2有一点不同
Python2.x 中返回的是过滤后的列表, 而 Python3 中返回到是一个 filter 类。
filter 类实现了 __iter__ 和 __next__ 方法, 可以看成是一个迭代器, 有惰性运算的特性, 相对 Python2.x 提升了性能, 可以节约内存。
所以我们可以用*newlist直接输出列表里的值
1)sys解析命令行参数:
获取当前路径
os.curdir()
os.remove(path) #path -- 要移除的文件路径
file_size = os.path.getsize(path)
2)os的path操作(比较重要):
from os import path as p
from posixpath import basename
#判断文件或目录是否存在
res = p.exists(r"D:\software_engineering\Python\codes\my_style\CSDN\a.py")
#获取当前程序运行的文件名字
current_file_name = basename(__file__)
print(current_file_name)
3)read函数:
如果参数不写 那么文件全部读取出来 如果给了数字 那就读取规定个数的字符
注意:如果不想写close 可以使用with open()as 句柄这样形式
with open("lal.txt", "r") as f2, open("lal.txt", "rb") as f4:
print(f2.read())
print(f4.read(2).decode("gbk"))
4)write函数:
with open("heheda.txt", "w") as f1:
f1.write("再带你们一周!!!")
with open("append.txt", "a") as f2:
f2.write("需要发票!!!滴滴的也行\nuuuuu")
f3 = open("new.txt", "a+")
data = ["新诗\n", "你是我永远都不想修复的bug\n", "爱你就是个死循环\n"]
5)循环读取:
解决文件过大 不能一次性读取的问题
import os
path = r"E:\工作目录\基础阶段\day10\资料\作业\youbian.txt"
f1 = open(path,"r",encoding="utf‐8")
has_read = 0
#获取文件大小
file_size = os.path.getsize(path)
READ_NUM = 100
while has_read < file_size:
res = f1.read(READ_NUM)
if len(res)<= 0:
pass
else:
print(res)
has_read += READ_NUM
把我们程序里面的数据结构 完整保存到我们文件里
以及读取
使用 pickle 包
import pickle
a = {"hehe":"88","age":12}
#归档
my_file = open("my_pickle.txt","wb")
pickle.dump(a,my_file)
#解档
my_file = open("my_pickle.txt","rb")
res = pickle.load(my_file)
print(res,type(res))
my_file.close()
在程序里定义变量,保存到了栈;
但是类的数据是在堆中,在栈里保存了你实例化对象的数据地址。成员函数私有化 @property把方法变成属性 可以直接用.操作
from my_person import Humen
class 子类名(父类名):
def __init__(self,name,age,sex,school):
#调用父级初始化函数
super().__init__(name, age, sex)
"""
super() 表示父类
"""
# 调用父类初始化函数的另一种方案
父类名字.__init__(self, name, age, sex)
# 自己独有的属性 我们就照常去写
self.school = school
注意:父类私有化的东西,不能在子类里修改
枚举,即列举有限的集合
from enum import Enum, IntEnum, unique
@unique
class Week(Enum):
MON = "周一"
TUS = "周二"
WEN = "周三"
THU = "周四"
FRI = "周五"
SAT = "周六"
SUN = "周天"
# 访问
res = Week.MON.value
print(res)
try:
是我们想要捕获异常代码段(有可能出现问题的地方)
except ValueError as 变量名 :如果程序出现异常下边的代码将会被执行 如果程序没出错 那么下边的代码 不会被执行print ( " 错误 " , 变量名 )变量名里 包含了我们的错误信息
try:
# int("9o")
print(a)
except ValueError as e:
#在python2里as可以使用,来替代 python3不可以
print("错误", e)
except NameError as e:
print("变量不存在", e)
except IndexError as e:
print("下标错误")
else:
当程序不出错的时候 会进入下边的代码
finally:
不管程序是否正常 最后都需要执行此处的代码
2)自己手动抛出异常:
raise 异常类型的类
如:raise Exception("字符串位数不正确")
3)自定义异常 :
class LengError(Exception):
def __init__(self, msg):
# super().__init__(msg)
self.msg = msg
def __str__(self):
return "[LengError]:详情:{}".format(self.msg)
raise LengError("长度不够")
a = "12"
try:
if len(a) != 3: 17
raise LengError("呵呵")
except LengError as e:
print(e,"___")