今日内容概要
- 文件内光标的移动实战演练
- 计算机硬盘存取数据的原理
- 文件内容修改
- 函数简介
- 函数的语法结构
- 函数的定义与调用
内容详细
文件内光标移动案例(了解)
| import time |
| with open(r'a.txt', 'rb') as f: |
| f.seek(0, 2) |
| while True: |
| line = f.readline() |
| if len(line) == 0: |
| |
| time.sleep(0, 5) |
| else: |
| print(line.decode('uf8'), end='') |
计算机硬盘修改数据的原理(了解)
硬盘写数据可以看成再硬盘上刻字 一旦需要修改中间内容 则需要重新刻字
因为刻的字不可能再从中间分开
硬盘删除数据的原理
不是直接删除而是改变状态 等待后续数据的覆盖才会被真正的删除
文件内容的修改
| |
| |
| |
| |
| |
| 优点:不耗费硬盘 |
| 缺点:耗费内存 |
| |
| '''先在另外一个地方写入内容 然后将源文件删除 将新文件命名成源文件''' |
| import os |
| with open('a.txt', 'r', encoding='utf8') as read_f, \ |
| open('.a.txt.swap', 'w', encoding='utf-8') as write_f: |
| for line in read_f: |
| write_f.write(line.replace('tony', 'kevinSB')) |
| os.remove('a.txt') |
| os.rename('.a.txt.swap', 'a.txt') |
| 优点:节约内存 |
| 缺点:消耗硬盘 |
函数前戏
| name_list = ['jason', 'kevin', 'oscar', 'jerry'] |
| |
| '''突然len不准用了''' |
| |
| |
| |
| |
| '''统计列表内数据值个数的代码需要在很多地方使用''' |
| |
| """ |
| 循环 |
| 相同的代码在相同的位置反复执行 |
| 函数 |
| 相同的代码在不同的位置反复执行 |
| ps:相同的代码不是真正一模一样而是可以通过传入的数据不同而做出不同的改变 |
| """ |
| def my_len(): |
| count = 0 |
| for i in name_list: |
| count += 1 |
| print(count) |
| my_len() |
| """ |
| 函数相当于是工具(具有一定功能) |
| 不用函数 |
| 修理工需要修理器件要用锤子 原地打造 每次用完就扔掉 下次用继续原地打造 |
| 用函数 |
| 修理工提前准备好工具 什么时候想用就直接拿出来使用 |
| """ |
函数的语法结构
| def 函数名(参数): |
| '''函数注释''' |
| 函数体代码 |
| return 返回值 |
| 1.def |
| 定义函数的关键字 |
| 2.函数名 |
| 命名等同于变量名 |
| 3.参数 |
| 可有可无 主要是再使用函数的时候规定要不要外界传数据进来 |
| 4.函数注释 |
| 类似于工具说明书 |
| 5.函数代码体 |
| 是整个函数的核心 主要取决于程序员的编写 |
| 6.return |
| 使用函数之后返回给使用者的数据 可有可无 |
函数的定义与调用
| 1.函数再定义的阶段只检测语法 不执行 |
| def func(): |
| pass |
| 2.函数再调用阶段才会执行函数代码体 |
| func() |
| 3.函数必须先定义后使用 |
| 4.函数定义使用关键字def函数调用使用>>>:函数加括号 |
| 如果有参数则需要再括号内按照相应的规则传递参数 |
函数的分类
| 1.空函数 |
| 函数的代码体是空的 使用pass或者...补全 |
| 空函数主要用于项目前期的功能框架搭建 |
| def register(): |
| 2.无参函数 |
| 定义函数的时候括号内没有参数 |
| def index(): |
| print('from index function') |
| 3.有参函数 |
| 定义函数的括号内参数 调用函数的时候传参数 |
| def func(a): |
| print(a) |
函数的返回值
| 1.什么是返回值 |
| 调用函数之后返回给调用者的结果 |
| 2.如何获取返回值 |
| 变量名 赋值符号 函数的调用 |
| res = func() |
| 3.函数返回值的多种情况 |
| 3.1.函数代码体中没有return关键字 默认返回None |
| 3.2.函数代码有return 如果后面没有写任何东西还是返回None |
| 3.3.函数体代码有return 后面有什么写什么 |
| 3.4.函数体代码有return并且后面有多个数据值 则自动返回组成元组返回 |
| 3.5.函数代码体碰到return自动结束 |
函数的参数
| 形式参数 |
| 在函数定义阶段括号内填写的参数 简称'形参' |
| 实际参数 |
| 在函数调用阶段括号内填写的参数 简称'实参' |
| ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| """ |
| 形参与实参的关系 |
| 形参类似于变量名 在函数定义阶段可以随便写 最好见名知意 |
| def register(name,pwd): |
| pass |
| |
| 实参类似于数据值 在函数调用阶段与形参临时绑定 函数运行结束立刻断开 |
| register('jason',123) 形参name与jason绑定 形参pwd与123绑定 |
| """ |
| ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构