13、文件修改及函数的基本使用
一、文件修改
1.1文件修改的两种方式
1.1.1、方法一
实现思路:将文件内容一次性全部读入内存中,在内存中修改完毕后在覆盖写回原文件
优点:文件修改中,不会生成新的文件占用储存
缺点:会过多的占用内存
with open(r'a.txt', mode='rt', encoding='utf-8') as f: res = f.read() msg = res.replace('a', 'b') with open(r'a.txt', 'w', encoding='utf-8')as f1: f1.write(msg)
1.1.2、方法二
实现思路:以读的方式发开第一个文件,以写的方式打开第二个临时文件,一行行的读取文件,修改后写入临时文件。删除原文件,将临时文件命名原文件。
优点:不会过多的占用内存
缺点:在文件修改的过程中同一份数据存入了两份
f = open('a.txt') res = f.read() print(res) with open(r'a.txt', 'r', encoding='utf-8')as f1, \ open(r'b.txt', 'w', encoding='utf-8')as f2: for x in f1: f2.write(x.replace('a', 'b')) os.remove('a.txt') os.rename('b.txt', 'a.txt')
二、函数的基本使用
2.1、什么是函数
函数相当于具备某一种功能的工具
函数的使用必须遵循一个原则:
先定义
后调用
2.2、为什么要用函数
1.组织结构不清晰,可读性差
2.代码冗余
3.可维护性差、扩张性差
2.3、怎么使用函数
1、先定义:三种定义方式
2.、后调用:三种调用方式
3、返回值:三种返回方式
2.4、定义函数会发生的事
1、申请内存空间保存保存函数体代码
2、将上述内存地址绑定函数名
3.定义函数不会检测函数体代码,但会检测函数体语法
2.5、调用函数会发生的事
1、通过函数名找到函数的内存地址
2、然后加口号就是在触发函数体代码的执行
2.6、先定义
def 函数名(参数1,参数2,...): """文档描述""" 函数体 return 值
2.6.1、形式一:无参数函数
def bar(): # bar=函数的内存地址 print('from bar') def foo(): # print(bar) bar() # 执行def bar的函数,即print('from bar') print('from foo') foo() # 先执行def foo():的函数,即bar(),再执行print('from foo')
2.6.2、形式二、有参函数
def func(x,y): # x=1 y=2 print(x,y) func(1,2)
2.6.3、空函数,函数体代码为pass
def func(x, y): pass
2.7、三种定义用在什么地方
2.7.1、无参函数的应用场景
def interactive(): name=input('username>>: ') age=input('age>>: ') gender=input('gender>>: ') msg='名字:{} 年龄:{} 性别'.format(name,age,gender) print(msg) interactive()
2.7.2、有参函数的应用场景
def add(x,y): # 参数-》原材料 # x=20 # y=30 res=x + y # print(res) return res # 返回值-》产品 # add(10,2) res=add(20,30) print(res)
2.7.3、空参函数的应用场景
def auth_user(): """user authentication function""" pass def download_file(): """download file function""" pass
三、调用函数
3.1、语句的形式:只加括号调用函数
interactive()
add(1,2)
3.2、表达式形式:通过函数赋值给变量,在输出变量
def add(x,y): # 参数-》原材料 res=x + y return res # 返回值-》产品 # 赋值表达式 res=add(1,2) print(res) # 数学表达式 res=add(1,2)*10 print(res)
3.3、函数调用可以当做参数
res=add(add(1,2),10) print(res)
四、函数返回值
return是函数结束的标志,即函数体代码一旦运行return就会终止函数的运行,并且将return后的值当做本次运行的结果返回。
4.1、返回空,函数内没有return,或者return none
return None
4.2、返回一个值:return值
def func(): return 10 res=func() print(res)
4.3、返回多个值:用逗号分隔成多个值,被return返回成元组
def func(): return 10, 'aa', [1, 2] res = func() print(res, type(res))