一、文件操作
IO操作:1.读2.写
函数的特性:1.函数有参数 x=f(y)---y是f的参数
open()函数:干什么的:IO操作文件
参数:
file:指的是被操作的文件,后面跟文件名称,暗含了文件路径
mode:通过什么方式操作文件
w:写文件内容encoding:编码(utf-8,gbk)
写的操作:
1.不管是否有文件,即使没有文件,open内部会自动创建一个文件,然后把写的内容写进去。
读的操作:
1.文件存在,那么从文件中读取数据
2.文件不存在,会报文件不存在,会报FileNotFoundError的错误信息,如[Errno 2] No such file or directory
1.打开并写入文件
文件操作三个步骤:
1.打开文件
2.操作文件(针对文件的读和写)
3.关闭文件(文件必须要关闭,要不会出现内存泄漏)
当操作文件占用的内存超过系统本身的内存量就会出现内存泄漏
步骤解读:
f=open(file='login.txt',mode='w') #代表打开一个login.txt文件,通过写的方式操作
f.write("hello python") #在文件中写入'hello python'
f.close() #关闭文件
注意:
如果原本文件中有内容,输入mode=“a”,表示追加内容,原本写入的内容还在。
如果原本文件中有内容,输入mode=“w”,会清空原本的内容再写入新的内容,即覆盖原本内容。
如果写入乱码,则在后面加上encoding=utf-8
如下:
2.读取文件
打开一个文件,执行读的权限:f=open(’login.txt','r')
读取文件里面所有的内容:print(f.read())
读取文件第一行:print(f.readline())
按行读取文件所有的内容:for item in f.readlines():
print(item.strip())
f.close()
文件操作实战:
需求:在D盘根目录下创建一个文件log.txt,写入一些数据在pycharm控制台输入f=open('D:/log.txt','r'),再按行读取文件内容,输出文件中写入的数据
3.with上下文:
它内部可以对文件进行关闭,这样避免了操作文件忘记关闭
as f是重命名:f=open('login.txt','r')
写的操作:
读的操作:
二.python中的函数
所谓函数,就是把重复的代码单独的分离出来,放在⼀个公共的地⽅,以后可以⼀直的进⾏调⽤,这样就可以解决多次重复来编写。
函数定义:使用的关键字是def
for example:
def 函数名称(函数的参数):
函数表达式
函数调用:
函数写完后,必须要经过调用才可以生效
调用函数的方式是:函数名称()
def func():
print('hello 世界!')
func()
参数类型:
1.形式参数:函数里面的参数叫形式参数
2.实际参数:函数被调用的时候,给参数赋予的值叫实际参数
参数调用注意事项:
1.函数在调用的时候,可以填写形式参数,也可以不填写
2.要么都填写,要么都不填写
3.函数在调用的时候,填写的实际参数要与形式参数的顺序,个数保持一致。
4.函数有形式参数的时候调用函数必须填写实际参数
实战1:
需求:定义一个函数,如果用户名是'lm',密码是'123456',则登录成功,否则登陆失败
def login(username,password):
if username=="lm" and password=="123456":
print("登录成功")
else:
print("登陆失败")
login('lm','123321')
实战2
需求:将用户名和密码写进login.txt文档
def registry(): #定义一个函数名 registry(登记)
username=input("请输入用户名:\n")
password=input("请输入密码:\n") #输入账户名和密码
temp=username+','+password #将用户名和密码写入login.txt,以逗号隔开
with open('login.txt','w')as f:
f.write(temp) #将用户名和密码写进login.txt文档
registry() #代表调用函数
实战3
需求:定义一个新的函数名def func():
找到login.txt里面的值
只输出“name”的值
def func():
with open('login.txt','r') as f: #对login,txt执行读的权限
data=f.read().split(',') #将login.txt里的值用逗号拆分,也就是字符串转为列表
print(data[0]) #输出data中的索引为0的值
func() #调用函数
默认参数:在定义函数的时候给形式参数指定了参数的值
默认参数注意事项:默认参数要么放在非默认参数的最后一位,要么每个形式参数都加默认参数
调用函数时,如果没有传递参数,则会使用默认参数。
4.动态参数:定义一个函数的时候,当函数的形式参数个数不确定,数据类型不确定的时候
*:代表的是元组的数据类型
**:代表的是字典的数据类型
动态函数的使用场景:当参数的个数不确定时,不用写多个函数,用一个动态参数就可以解决。