文件处理
修改文件的两种方式
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()