目录
修改文件:
1.将数据由硬盘读到内存(读文件)
2.在内存中完成修改(字符串的替换)
3.再覆盖原来的内容(写文件)
优点:硬盘上只有一个文件
缺点:当文件过大的情况下,可能会造成内存溢出
replace 替换
with open(r'test02', 'r', encoding='utf-8') as f:
res = f.read()
print(res)with open(r'test02', 'w', encoding='utf-8')as f:
data = res.replace('jeff', 'gyy') # 替换
print(data)
f.write(data)
import os
1.创建一个新文件
2.读取老文件内容到内存进行修改 将修改好的内容写到新文件当中
3.将老文件删除 将新文件的名字改成老文件
优点:内存中始终只有一行内容,不占内存
缺点:在某一时刻硬盘上会同时存在两个文件
with open(r'test02', 'r', encoding='utf-8') as read_f, open(r'test02.swap', 'a', encoding='utf-8') as write_f:
for line in read_f:
new_line = line.replace('gyy', 'cjm')
write_f.write(new_line)
os.remove(r'test02') # 删除老文件
os.rename(r'test02.swap', 'test02') # 新文件改名为老文件名字
1.函数在调用阶段直接或间接的又调用自己
2.递归函数不需要考虑循环的次数,只需把握结束的条件
# 查看递归深度:默认1000
import sys
print(sys.getrecursionlimit()) # 不是很精确
def index():
print("这是第一个函数")
login()
def login():
print("这是第二个函数")
index()
index()
1.回溯:重复的过程,一层层降低难度
2.递推:一层层往回推导的过程
要求:
第一个人18岁,第二个人比第一个人大两岁,第三个人比第二个人大两岁,第四个人比第三个人大两岁。。。
age(5)=age(4)+2
age(4)=age(3)+2
age(3)=age(2)+2
age(2)=age(1)+2
age(1)=18
def age(n):
if n == 1:
return 18
return age(n-1) + 2
res = age(5) # 第五个人的年龄
print(res)
复杂度降低:列表越来越短
递归函数:
l = [1 ,[2 ,[3 ,[4 ,]]]]
def main(l):
for i in l:
if type(i )is int: # 判断是否为整型
print(i)
else:
main(i)
main(l)
装饰器:为了调用方式一致,方便使用者
@property首先创建一个age对象,所以@setter、@deleter要加函数名
:这里的age是装饰方法的名称
@property(获取私有) :把一个方法伪装成普通属性,通常函数名和属性名保持一致(方便使用者调用)
@函数名.setter(修改私有):函数名和属性名保持一致
@函数名.deleter(控制删除):
class A:
def __init__(self, name, age):
self.name = name
self.__age = age
@property # 获取属性时,触发下面
# 获取伪装成普通属性,通常函数名伪装成属性名
def age(self):
return self.__age
@age.setter # 修改属性时,触发下面
def age(self, new_age):
self.__age = new_age
print('修改成功')
@age.deleter # 删除属性时,触发下面
def age(self):
print('删除时触发的内容')
1.查看私有属性
a = A('jeff', 50)
print(a.name)
print(a.age)
结果:jeff 50
2.修改私有属性
a = A('jeff', 50) # 定义初始
a.age = 100 #修改
print(a.age)
结果:修改成功 100
3.删出私有属性触发
a = A('jeff', 50)
del a.age
结果:删除时触发的内容
"""
1.isinstance(a,int) 判断类型
参数a:要判断的对象
参数int:判断的类型
2.issubclass(a,B):判断a是不是B的子类
参数a:子类
参数B:父类
"""
1.isinstance案例:
def add_num(a, b):
# if type(a) == int and type(b) == int: # 等于下面一句
if isinstance(a,int) and isinstance(b,int):
return a+b
else:
print("不能相加")
print(add_num('你', 12))
#结果:不能相加
2.isinstance案例:
class Animal:
def eat(self):
print("动物吃东西。。。")
class Pig(Animal):
def eat(self):
print('猪什么都吃 ,不挑食')
class Tree:
def light(self):
print('植物光合作业...')
# issubcalss
def manage(obj):
# issubclass 判断传入的obj是不是Animal的子类
if issubclass(type(obj), Animal):
obj.eat()
else:
print('不是动物')
shu = Tree()
manage(shu)
#结果:不是动物
pig = Pig()
manage(pig)
#结果:猪什么都吃 ,不挑食
原文:https://www.cnblogs.com/guyouyin123/p/11345004.html