编写python函数常用技巧代码(二)

目录

系列文章目录

一. 高阶函数

二. 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直接输出列表里的值


二. os模块

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"]

编写python函数常用技巧代码(二)_第1张图片

 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 ( " 错误 " , 变量名 )
变量名里 包含了我们的错误信息
except 可以写多个并且,只要有一个被捕获的类型满足条件,那么其他的 except 将不会被执行,示例如下:
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,"___")

你可能感兴趣的:(python,python,经验分享,学习)