文件操作与函数
一、文件操作
1、函数特性
IO操作文件(可分为读、写)
2、参数
file:是指被操作的文件
mode:通过什么方式操作文件(读还是写)
a:追加——在原有内容后再添加新的内容
w:写文件内容——文件内有内容时先清空原有的,再添加新写的
r:读取文件内容
encoding:编码(utf-8,gdk)
with:上下文,内部可以对文件关闭,避免操作文件忘记关闭
2.1、写的操作
不管是否有文件,即使没有文件,open内部会自动创建一个文件,然后把写的内容写进去
2.2、读的操作
1、文件存在,那么从文件中读取数据
2、文件不存在,会报错:FileNotFoundError,如:[Errno 2] No such file or directory
文件操作的三个步骤
1、打开文件
2、操作文件
3、关闭文件(文件必须要关闭,否则会出现内存泄漏问题)
3、实战操作
3.1、单行内容写入
f=open(file='login.txt',mode='w') f.write('new item') f.close()
3.2、多行内容写入
当内容中出现中文字符时,需要将编码带上,否则会出现乱码情况
f=open(file='login.txt',mode='w',encoding='utf-8') data='''今 天 是 阴 天 ''' f.writelines(data) f.close()
3.3、读取文件中的所有信息
f=open('login.txt','r',encoding='utf-8') print(f.read()) f.close()
3.4、仅读取第一行的信息
f=open('login.txt','r',encoding='utf-8') print(f.readline()) f.close()
3.5、按行读取文件中所有内容
取消空格:strip()
f=open(file="login.txt",mode='r',encoding='utf-8') for item in f.readlines(): print(item.strip()) f.close()
3.6、with上下文
as:别名,f=open('login.txt','r')
with open('login.txt','r') as f: print(f.read())
二、函数:def
1、函数的特性
所谓函数,就是把重复的代码单独的分离出来,放在⼀个公共的地方,以后可以⼀直的进行调用,这样就可以解决多次重复来编写
2、定义
代码: def 函数名称(函数的参数)
函数表达式
3、函数调用
函数写完后,必须要经过调用才可以生效,如果不调用,不会生效
4.1、形式参数
函数中的参数叫形式参数
4.2、实际参数
函数被调用的时候,给参数赋予的值叫实际参数
4.3、默认参数
在定义函数的时候给形式参数指定了参数的值
默认参数只能放在非默认参数的后面,如果放在前面就会报错。
在调用过程中,如果没有给该形式参数赋值,那么他的值默认就是自己定义的默认值;
如果我们给形式参数定义了值,那么他的值就是我们新定义的值。
4.4、动态参数
定义一个函数时,当函数的形式参数个数不确定,数据类型不确定时就用动态参数
如:def func(*a,**b),a和b为自定义的变量,一般a和b默认用args和kwargs,即def func(*args,**kwargs)
*:代表的是元组的数据类型
**:代表的是字典的数据类型
5、参数调用注意事项
1、函数再调用的时候,可以填写形式参数,也可以不填写
2、要么都填写,要么都不填写
3、函数再调用的时候,填写的实际参数要与形式参数的顺序,个数一致
4、函数有形式参数的时候,调用函数必须填写实际参数
6、实战操作
6.1、函数定义与调用
# 函数定义 def func(): print('hello world') # 函数调用 func()
6.2、登录的函数
# 登录的函数 def login(username,password): if username=='wp' and password=='12345': print('ok') else: print('no') # 调用函数时,形式参数为username,password,需要都填写 login(username='wp',password='12345') # 调用函数时,形式参数都可以不写 login('wp','12345')
6.3、注册的函数
# 注册的函数 def registry(user=None): username=input('姓名:\t') password=input('密码:\t') code=username+","+password with open(file='login.txt',mode='a') as f: f.write(code) registry()
6.4、输出文件中的用户名
# 注册的函数 def registry(user=None): username=input('姓名:\t') password=input('密码:\t') code=username+","+password with open(file='login.txt',mode='a') as f: f.write(code) registry()
6.5、默认参数练习
给密码赋予默认值为12345
# 默认参数 def login(username,password='12345'): if username=='wp' and password=='12345': print('ok') else: print('no') # 调用函数的时候,如果不指定形式参数password的值,它的默认值就是12345 login(username='wp') # 如果指定形式参数password的值,指定的就是设置的值 login(username='wp',password='wp12345')
6.6、动态参数练习
# 字典练习,**kwargs在函数中会把上传的参数转成一个字典 def func(**kwargs): print(kwargs) print(type(kwargs)) 两种方式输出 func(**{'name':'wp'},**{'password':'12345'}) func(name='wp',password='12345')
使用场景:当*args和**kwargs组合起来使用,理论上能接受任何形式和任意数量的参数,需要注意的是,*args必须在**kwargs之前
def func(*args,**kwargs): print(args,kwargs) func(pay='微信',price=100) func(pay='支付宝',price=50) func(pay='招商银行',user='wp',price=30) func(1,2,a='9',b='8') list1=['微信','支付宝','招商银行','现金','信用卡'] tuple1={'微信':'ok','支付宝':'no','招商银行':'ok','现金':500,'信用卡':'6.8'} # func(list1,tuple1),如果这样调用,后面的字典是空的, # 因此我们需要叫函数知道哪个变量是*args的参数,哪个是**kwargs的参数, # 正确上传参数写法:func(*list1,**tuple1) func(*list1,**tuple1)