python初识函数(1)
引言
小伙伴们,我们已经学了很多有意思的东西了,下面来学点让我们可以简化重复代码的方法。

文件内光标的移动
# read方法在文本模式下,括号内可以写数字来表示读到哪一位字符为止
with open('a.txt','r',encoding ='utf8') as f1:
print(f1.read(3))
# read方法在二进制模式下,括号内可以写数字来表示读到哪一位字节为止,因此注意解码。
with open('b.txt','rb') as f2:
print(f2.read(9).decode('utf8'))
'''
utf8中文用3个字节表示英文用一个字节表示,unicode所有字符都是用2个字节的,以后研究utf8、GBK等编码就可以了。
'''
# seek方法可以控制光标的移动,任何模式下移动的单位都是字节数
with open('a.txt','r',encoding='utf8') as f3:
f3.seek(3, 0)
print(f3.read())
'''
记住seek方法中的第一个参数是读取光标所在位置后面的指定位数字节,第二个参数有0,1,2三种,0表示光标移动到文本的初始位置,1表示光标在当前位置,2表示光标在文本的结尾处。除了0是两个模式都支持外,其他只支持二进制模式。
'''
文件的修改
'''
讲文件的修改之前,我们要先讲硬盘上数据的两种状态作为知识补充,
硬盘上的数据分为两种占有态和自由态,我们删除数据就是把数据从占有态变化成了自由态,之后进来的新数据如果落在自由态位置上就会把原有的数据直接覆盖掉,所以以后想删除自己重要信息,在删除后还得进行覆盖。记住机械硬盘是要这么做的,固态有些没有状态分类的就不需要覆盖了。
'''
with open(r'b.xtx','r+t',encoding='utf8') as f:
# 记住r+t就是文本模式中的读写模式
f.seek(2) # 不写模式,默认为0模式
f.write('da')
'''
文件数据在硬盘上其实是刻死,只能在两边加内容,想在中间加就得移除老内容,重新刻一个。
'''
# 修改有两种思路,都是需要重新刻内容的
'''
1. 将文件内容全部读入内存中,在内存中修改文件数据,然后用w操作模式覆盖原文件,优点是修改过程同一份数据只有一份,但是占用内存多
2. 用读的方式打开源文件,用写的方式打开一个临时文件,一行行读取源文件内容,修改完后写入临时文件,然后删除原文件,把临时文件改为原文件的名字,来个狸猫换太子,优点不会占用太多内存,缺点修改过程同一份数据存了两份。
'''

函数的简介
'''
对于函数我的理解就是将一个完整的解决问题的过程封装成一个包,我们只要往里面放入需要的动态数据,就可以直接得到问题解决后的结果。
'''
# 函数和循环的区别在于循环时在相同的地方反复执行相同的代码,而函数时在不同的地方反复执行相同的代码
# len其实是python解释器提前给我们写好的函数,这种叫内置函数,而我们自己封装的叫自定义函数
# 当一个方法要重复使用的时候,我们就可以把它封装成一个函数,这样可以反复利用。
函数的语法结构
def 函数名(参数1,参数2,参数3):
函数体代码
return 返回值
'''
def是用来定义函数的关键字,函数名要做到见名知意,括号中的参数就是用于写给运用函数时,写入实参的作用,函数体代码是最重要的,你创建的函数是用来干什么的都由函数体代码决定,return虽然是返回值,但是你不能直接看到,还是要靠print。函数的运用就是直接函数名()即可,但是括号内的参数就看你所用函数的要求了。
'''