内容回顾
# 实现动态查看最新一条日志的效果
import time
with open(r'a.txt', 'rb') as f:
f.seek(0,2) # 2模式直接到文件末尾移动0个位置
while True:
line = f.readline() # 循环的读取每一行
if len(line) == 0: # 判断其读取到的内容长度为0
# 没有内容则
time.sleep(0.5) # 则睡0.5秒
else:
print(line.decode('utf8'), end='') # 不然则打印解码出读取到的内容
硬盘写数据可以看做是在硬盘上刻字 一旦需要修改中间内容 则需要重新刻字
因为刻过的字不可能从中间分开
硬盘删除数据的原理:
不是直接删除而是改变状态 等待后续数据对的覆盖才会被真正删除
# 方式一 覆盖写 缺点:当这个文件内容特别大的时候一次性读取容易导致内存溢出
with open(r'c.txt', 'r', encoding='utf8') as f1:
data = f.read()
with open(r'c.txt', 'w', encoding='utf8') as f2:
new_data = data.replace('tony', 'jason')
f2.write(new_data)
# 方式二 换地方写(先在另外一个地方写入内容 然后将源文件删除 将新文件命名成源文件)
import os
with open(r'a.txt', 'r', encoding='utf8') as read_f,\open(r'a.txt.swap', 'w', encoding='utf8') as write_f:
for line in read_f:
write_f.write(line.replace('tony', 'kevin'))
os.remove('a.txt') # 删除a.txt
os.remove('a.txt.swap', 'a.txt') # 重命名文件
name_list = ['jason', 'kevin', 'oscar', 'jerry']
print(len(name_list)) # 假设len无法使用
for循环计数:
count = 0
for i in name_list:
count += 1
print(count)
'''统计列表内数据值个数的代码需要在很多地方使用'''
相同的代码与需要在不同位置反复执行
# 循环:相同代码在相同的位置反复执行
# 函数:相同代码在不同位置反复执行
'''相同的代码不是正真一模一样而是可以通过传入的数据不同而做出不同的改变'''
def my_len():
count = 0
for i in name_list:
count += 1
print(count)
my_len()
'''
函数简介:函数就类似于是工具 提前定义好之后可以反复使用
不用函数:则相当于修理工修理器件要用工具 原地打造 每次用完就扔掉 下次用继续原地打造
用函数:修理工提前准备好工具 什么时候想用就直接拿出来使用
'''
# 函数语法结构
def 函数名(参数1, 参数2):
'''函数注释'''
函数体代码
return 返回值
1.def
定义函数的关键字
2.函数名
命名等同于变量名(函数名的命名规范与风格遵循变量名的)
3.参数
可有可无 主要在使用函数的时候需要规定要不要外界传数据进来
4.函数注释
可有可无 类似于工具的说明书
5.函数体代码
是整个函数的核心 主要取决于程序员的编写
6.return
可有可无 使用函数之后可以返回给使用者的数据
函数定义与调用
1.函数在定义阶段只检测语法 不执行代码
def func():
pass
2.函数在调用阶段才会执行函数体代码
func()
3.函数必须先定后调用
4.函数定义使用关键字def函数调用使用>>>:函数名加括号
如果有参数则需要在括号内按照相应的规则传递参数
函数在定义阶段与调用阶段底层原理
1.在内存空间中申请一块空间存储函数体代码
2.将函数体代码所在的空间地址绑定给函数名
3.函数名加括号则会执行函数体代码
1.空函数
函数体代码为空 使用pass或者...补全语法的
空函数主要用于项目前期的功能框架搭建
def run():
pass
def fight():
pass
def talk():
pass
2.无参函数
定义函数的时候括号内没有参数
def infex():
print('from index function')
3.有参函数
定义函数的时候括号内写参数 调用函数的时候括号传参数
def func(a):
print(a)
1.什么是返回值
调用函数之后返回给调用者的结果
2.如何获取返回值
变量名 赋值符号 函数的调用
res = func() # 先执行func()函数 然后返回值赋值给变量名res
3.函数返回值的多种情况
1.函数体代码中没有return关键字 默认返回None
2.函数体代码有return 如果后面没有写任何东西还是返回None
3.函数体代码有retrun 后面写什么就返回什么
4.函数体代码有retrun并且有多个数据值 则自动组织成元组返回
5.函数体代码遇到return会立刻结束
形式参数
在韩函数定义阶段括号内填写的参数 简称'形参'
def func(a, b):
pass
# a和b就是函数func的形参
实际参数
在函数调用阶段括号内填写的参数 简称'实参'
func(1,2)
# 数据1和2就是函数func的实参
形参与实参的关系
形参类似于变量名 在函数定义阶段可以随便写 最好是见名知意
def register(name, pwd):
pass
实参类似于数据值 在函数调用阶段与形参临时绑定 函数运行结束立刻断开
register('jason', 123) 形参name与jason绑定 形参pwd与123绑定