文件处理 修改文件的两种方式 1.同时打开两个文件 读取要修改的文件内容,read(可能导致内存溢出) 赋值给变量 修改 将修改后的内容重新写入文件 2.读取要修改的文件内容,readline或是for in 一行一行读取 修改一行 写入临时文件中 以w/a都行 等全部修改完毕后 删除源文件 重命名临时文件 名字为原文件名 复制文件 从源文件读取 写入到目标文件 常用操作 f.flush 立即刷到硬盘(由于windows 写入硬盘时会有自动缓存的效果 不会立马写入硬盘) closed 是否关闭 encoding 获取编码 name 文件路径 模式 文本模式t 是默认的只能处理文本文件,会自动编码解码 字节模式b 是用于任何文件类型 sys.argv 获取调用解释器时传入参数 函数基础 函数概念 面条版的程序存在的问题 1.代码结构不清晰,可读性差 2.有很多冗余(多余的重复)代码 3.后期的维护性极差,扩展性 基于上述问题,程序中必须有对应的解决方案就是函数 什么是函数 是实现某一功能的代码的集合体 相当于生活中具备某个功能的工具,例如:锤子 要使用工具 必须先制造工具,才能使用 同理,在程序中要想使用函数,则必须先定义函数(创建函数) 如何定义函数 定义函数的语法: def 函数的名字(参数1,..参数n): " 文档注释 " 代码1 代码2 ... return 值 return 参数 和 文档注释都是可选的 def:定义的关键字 函数的名字:用来查找和执行函数 python的命名规范 不能数字开头 不能是关键字 数字字母下划线组成 要见名知意,这一点很重要,必须让使用的人看出来你的功能 用下划线连接多个单词 文档注释:注释是给程序员看的备注信息,文档注释是用于描述函数的具体细节 文档注释可以被help函数提取 import 文档注释 导入文档注释的内容 代码块:具体实现功能的代码,称之为函数体 return:用于返回值给使用者 函数名加括号就能触发函数体的执行 称之为调用函数 参数是什么 参与运算的数据 函数必须遵循 先定义 后调用*** 参数是可选 那就可以将函数分为 有参函数 当你的函数执行需要依赖外界的数据才能完成功能,那就应该是有参函数 无参函数 当你的函数体执行不需要依赖外界的数据就能完成功能,那就应该是无参函数 如果不包含任何函数体就称之为空函数 def func(): pass(略过函数体) #调用 func() 调用空函数是没有意义的 #在程序开发初期有用,可以用于定义出程序的结构 def login(): pass def shopping_cars(): pass def collection pass 比较两个数 谁大 def max(a,b): if a>b: print('max is ',a) else: print('max is ',b) max(10,20) 什么样的代码应该定义为函数 这段代码会多次执行, 定义阶段和调试阶段 1.申请内存空间,将函数的代码存储到内存中 2.把内存地址和函数名建立绑定关系 需要强调的是:函数在定义阶段是不会执行函数代码的,但是会检测语法 调用阶段 1.通过函数名找到函数的内存地址 2.加括号处罚函数体的执行 def func() print('func run') 1.直接调用 func() 2.在表达式中调用 def max(a,b): if a >b: return a else: return b print(max(10,20)*100) 3.将函数的返回值作为参数 max(max(10,20),30) 函数的返回值 return 关键字用来返回一个值 在函数定义中是可选的 什么时候该有返回值 函数是工具,是帮你完成某个功能的,一些功能在完成后,必须要产生一个结果给调用者 例如生活中的榨汁机,执行完成后使用者应该得到果汁 什么时候不需要返回值 在调用这个函数是,不需要返回任何结果给调用者,那就不需要返回值 return的特殊用法 1.一次性返回多个值 def func(): return 1,2,3,4,'abc',1.1 res=func() print(res) 对返回值进行解压 a,b= func() print(a,b) 2.返回空值 不写任何的return 默认返回None return后不返回任何值 return None def func2(): return None def func3(): pass 3.一个函数中可以有多个return关键字 函数执行过程中只要遇到了return后续代码都不会执行 函数立马返回 可以利用这个特点可以来结束函数的执行 def func4() print(1) return'1' print(2) return'2' func4()