文件的修改与函数

文件的修改

计算机硬盘修改数据的原理

硬盘有两个形态
占有态和自由态
我们在删除数据的时候,就是将原来的位置标记为自由态,在下载新数据落到这个自由态原本的标记位置就会直接覆盖。 文件数据在硬盘上是刻死的,不可能中间添加新的内容,只能将老数据移除之后,在刻上新数据

修改方法1

1 先将文件内容一次性读写到内存中,在使用只写不读模式就行修改,在文件修改过程中同一数据只有一份,如果文件很大会造成内存溢出
a.txt 你看你擦
with open(r'a.txt', 'r', encoding = 'utf8') as f:
    data = f.read()
with open(r'a.txt', 'w', encoding = 'utf8') as f1:
    f1.write(data.replace('你看','我看'))
    结果为 我看我擦

修改方法2

用写的模式打开原文件,在用写的模式打开一个临时文件,一行行读取原文件内容。修改完成后写入临时文件,删除原文件将临时文件重命名为原文件名。
a.txt 你看你擦
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('你看', '我看'))
    os.remove('a.txt')
    os.rename('a.txt.swap', 'a.txt')

函数简介

函数其实就是像工具,提前定义好之后,就可以拿出来反复的使用。
len用法
l1 = '你看你擦'
print(len(l1))
如果可以使用len方法,可以用函数
def my_len():
    count = 0
    for i in l1:
        count += 1
    print(count)
my_len() # 调用函数代码
函数与循环的区别
1. 在不同的地方,反复执行相同的代码>>>>函数
相同的代码不是真正一样的,是可以通过传出的数据不同做出不同的改变
2. 在相同的地方,反复执行相同的代码>>>>循环

函数的语法结构

def + 函数名 + (参数):
    """函数的注释"""
    函数体代码
    return 返回值
1.def 定义函数的关键字
2.函数名  函数名类似变量名,命名与变量名一致,见名知意
3.参数  可有可无,主要规定使用函数的时候规定要不要外界传数据进来
4.函数注释  解释函数的主要功能使用方法,和说明书类似
5.函数体代码 函数的核心功能
6.return 后面加的东西执行完函数就会返回 可有可无

函数的定义与调用

 定义i函数需要使用def关键字
 定义函数的过程不会执行函数,只会检测它的语法
     例如:
     def func():
         whydeuge  定义的时候不会发生报错
     def func():
         if  语法定义时语法错误就会发生报错
函数在调用阶段才会执行函数体代码,函数必须先定义后调用。

函数的分类

1.空函数
函数体代码为空时,常使用pass或...来补全语法
空函数主要用于项目前期的功能搭建,提醒我们这里该写什么功能。
def register():
    """注册功能"""
    pass
--------------------------------------------------
2. 无参函数
定义函数的时候我们没有在括号内填写参数
def index():
    print('aaaaaa')
-------------------------------------------------
3.有参函数
定义函数的时候括号内有填写参数 调用参数的时候括号传参数
def func(a):
    print(a)

函数的返回值

返回值:
在我们调用函数时会得到一个结果这个结果就是返回值
如何获取返回值:
    变量名 = 函数调用
操作:
def test():
    print('你看你擦')
没有return关键词时,返回值是None (空)
------------------------------------------------
def test():
    print('你看你擦')
    return
a = test()
print(a) # None
有return关键词,没返回值
------------------------------------------------
def test():
    print('你看你擦')    
    return '你看你擦'
a = test()
print(a) # 你看你擦
有关键词return,有返回值
------------------------------------------------
def test():
    print(' 你看你擦')
    return '你看你擦', '一Giao窝里giao'
a = test()
print(a) # ('你看你擦', '一Giao窝里giao')
关键词 return后面可以跟多个值,用逗号隔开,结果是元组,你也可以手动在把值改成列表,结果就是列表
------------------------------------------------
注意:
函数体代码里遇到return会立刻解释函数运行
函数体代码里的 return 相当于 循环体代码中的 break
函数体代码中没有return关键字 默认返回None
函数体代码有return 如果后面没有写任何东西还是返回None
函数体代码有return 后面写什么就返回什么
函数体代码有return并且后面有多个数据值 则自动组织成元组返回

函数的参数(超级重要)

定义时小括号里的参数,用来接收参数用的称为“形参”
调用是小括号里的参数,用来传递参数的称为“实参”
def hello(a):  # 这个a就是形参
    pass
def hello(a):  
    hello('你好')  # 这个‘你好’就是实参
形参a 和实参 你好 绑定 #  临时绑定
------------------------------------------------
形参与实参的关系
    形参类似于是变量名、实参类似于是变量的值
		在调用函数的时候传入实参 会与形参临时绑定
		函数运行结束之后自动解除绑定
posted @ 2022-10-09 19:00  李阿鸡  阅读(113)  评论(0编辑  收藏  举报
Title