从小白到小黑 python学习之旅 日常总结 13(文件处理3 函数)
文件处理3
.seek 的应用
access.log(访问日志)
import time with open(r'D:\cool\access.log', mode='rb') as f: # 1、将指针跳到文件末尾 f.seek(0,2) while True: line=f.readline() if len(line) == 0: time.sleep(0.3) else: print(line.decode('utf-8'),end='')
文件修改的两种方式
方式一:文本编辑采用的就是这种方式
实现思路:将文件内容发一次性全部读入内存,然后在内存中修改完毕后再覆盖写回原文件
优点: 在文件修改过程中同一份数据只有一份
缺点: 会过多地占用内存
with open('D:\cool\啦啦啦',mode='rt',encoding='utf-8') as f: res=f.read() data=res.replace('很','超超超') with open('D:\cool\啦啦啦',mode='wt',encoding='utf-8') as f1: f1.write(data)
方式二:
实现思路:以读的方式打开原文件,以写的方式打开一个临时文件,一行行读取原文件内容,修改完后写入临时文件...,删掉原文件,将临时文件重命名原文件名
优点: 不会占用过多的内存
缺点: 在文件修改过程中同一份数据存了两份
import os with open('D:\cool\啦啦啦', mode='rt', encoding='utf-8') as f, \ open('D:\cool\啦啦啦1', mode='wt', encoding='utf-8') as f1: for line in f: f1.write(line.replace('很', '超超超')) os.remove('D:\cool\啦啦啦') # 删除老文件 os.rename('D:\cool\啦啦啦1', 'D:\cool\啦啦啦') # 把新文件名改成老文件
函数
1、什么是函数
函数就相当于把一串代码打包起来赋予他们一个名字(标签),哪里需要就往哪里调,增加可读性
函数的使用必须遵循一个原则:
先定义
后调用
2、为何要用函数
因为不用函数就会出现以下的情况:
1、组织结构不清晰,可读性差
2、代码冗余
3、可维护性、扩展性差
3、如何用函数
先定义
三种定义方式
后调用
三种调用方式
返回值
三种返回值的形式
# 示范1 def bar(): # bar=函数的内存地址 print('from bar') def foo(): print(bar) bar() print('from foo') foo() #<function bar at 0x00000000026ED160> #from bar #from foo # 示范2 def foo(): bar() print('from foo') def bar(): # bar=函数的内存地址 print('from bar') foo() #from bar #from foo # 示范3 def foo(): bar() print('from foo') foo() #直接报错 def bar(): # bar=函数的内存地址 print('from bar')
一、先定义
定义的语法
def 函数名(参数1,参数2,...):
"""文档描述"""
函数体
return 值
定义函数发生的事情
1、申请内存空间保存函数体代码
2、将上述内存地址绑定函数名
3、定义函数不会执行函数体代码,但是会检测函数体语法
函数的三种定义形式 #函数名的命名规范和变量名一样 命名风格最好是动词
形式一:无参函数
def func(): print('哈哈哈') print('哈哈哈') print('哈哈哈')
应用场景
def interactive(): name=input('username>>: ') age=input('age>>: ') gender=input('gender>>: ') msg='名字:{} 年龄:{} 性别:{}'.format(name,age,gender) print(msg) interactive()
形式二:有参函数
def func(x,y): # x=1 y=2 print(x,y) func(1,2) #1 2
应用场景
def add(x,y): # 参数-》原材料 print(x + y) add(20,30) #50
形式三:空函数,函数体代码为pass
def func(x, y): pass
应用场景
# 用来构思代码 def auth_user(): """user authentication function""" pass def download_file(): """download file function""" pass def upload_file(): """upload file function""" pass def ls(): """list contents function""" pass def cd(): """change directory""" pass
错误示范 1
def func(): x #没有 变量值 不会直接报错 运行到此函数时会报错 因为定义函数不会执行函数体代码 print('哈哈哈') print('哈哈哈') print('哈哈哈')
错误示范 2
def func(): print( #直接报错 定义函数不会执行函数体代码,但是会检测函数体语法 print('哈哈哈') print('哈哈哈') print('哈哈哈')
二、调用函数
调用函数发生的事情
1、通过函数名找到函数的内存地址
2、然后加口号就是在触发函数体代码的执行
调用函数的三种形式
1、语句的形式:只加括号调用函数
#只调用函数 不加任何操作 #例下 interactive() add(1,2)
2、表达式形式:
# 赋值表达式 def add(x,y): # 参数-》原材料 res=x + y return res # 返回值-》产品 res=add(1,2) print(res) #3
# 数学表达式 def add(x,y): # 参数-》原材料 res=x + y return res # 返回值-》产品 res=add(1,2)*10 print(res) #30
3、函数调用可以当做参数
def add(x,y): # 参数-》原材料 res=x + y return res # 返回值-》产品 res=add(add(1,2),10) print(res) #13
三、函数返回值
return是函数结束的标志,即函数体代码一旦运行到return会立刻
终止函数的运行,并且会将return后的值当做本次运行的结果返回
函数返回值的三种形式
1、返回None:函数体内没有return
def func(): ... print(func()) #None
2、返回一个值:return 值
def func(): return 10 print(func()) #10
3、返回多个值:用逗号分隔开多个值,会被return返回成元组
def func(): return 10, 'aa', [1, 2] res = func() print(res, type(res)) #(10, 'aa', [1, 2]) <class 'tuple'>




浙公网安备 33010602011771号