文件操作与函数

一、文件操作

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、函数的参数

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)

 

 

 

posted @ 2022-03-29 20:51  棠小梨  阅读(52)  评论(0编辑  收藏  举报