文件和函数(一)

文件的高级应用

1. 可读、可写

  1. r+:可读、可写

    即可读又可写(尽量不要使用),r+ 是在后面追加

    with open('test.py', 'r+', encoding='utf8') as fr:
        date = fr.read()
        fr.write('x = 10')
        print(date)
    
  2. w+:可写、可读

    清空文件的功能是w提供的,w+ 更不要使用

    with open('test.py', 'w+', encoding='utf8') as fw:
        fw.write('x = 10')
        date = fw.read()
        print(date)
    
  3. a+:可追加、可读

    a有追加的功能,a的指针在末尾,a+的功能也没用

    with open('test.py', 'a+', encoding='utf8') ad fa:
        fa.write('x = 10')
        date = fa.read()
        print(date)
    

2. 指针的应用

文件的内置方法有四种,只有read(n)涉及的是字符个数,seek()/tell()truncate()涉及的都是字节个数

  1. seek()

    seek()方法有两个参数,一个是offset,一个是whence。offset代表了文件指针的偏移量,单位是字节;whence代表了文件指针所在的位置,默认从文件头开始,0表示从头开始,1表示从当前位置开始,2表示从文件末开始

  2. tell()

    tell()方法是统计从文件开头到当前指针所在位置

  3. read(n)

    read(n)方法,读取文件内容,n表示了字符个数

  4. truncate()

    truncate()方法是截断文件,所以文件的打开方式必须是可写的,但不能用w或w+方法打开,这样会直接清空文件。truncate()不加参数,相当于清空文件。

文件修改的两种方式

首先文件没有修改的说法,只有覆盖的说法。

方式一

将硬盘存放的改文件内容全部加载到内存,在内存是可以修改的,修改完毕后,再由内存覆盖到硬盘

方式二

将硬盘存放的改文件的内容一行一行地读入内存,修改完毕后就写入新文件,最后用新文件覆盖原文件

总而言之,修改文件内容的思路是:以读的方式打开原文件,以写的方法打开一个新文件,把原文件的内容进行修改,然后写入新文件,之后利用os模块的方法,把原文件删除,重命名新文件为原文件名,以达到以假乱真的目的

import os
with open('原文件', 'r', encoding='utf8') as fr, 
		open('新文件', 'w', encoding='utf8') as fw:
    for i in fr:
        i = i.replace('旧的内容', '新的内容')
        fw.write(i)

os.remove('原文件') # 删除原文件
os.rename('新文件名', '原文件名') # 重命名新文件为原文件名

函数

函数就是具有某种功能的工具,函数能提高应用的模块性和代码的重复利用率,是为了让代码分块化。函数更多的是一种思想,而不是一种技术。

函数的定义

Python中定义函数要使用def关键字,一般格式如下

def 函数名():	# 定义阶段
    '''函数注释写在这里''' # 函数相当于工具,那注释就相当于工具的说明书
    <代码块>

函数在定义阶段不执行函数体的代码块,只检测是否有语法错误

函数的调用

函数的调用是为了使用函数的功能。

函数名(...)就可以调用函数了,调用函数后会执行函数体代码,直到碰到return或者执行完函数体内所有代码结束。

定义函数的三种形式

定义函数有三种形式,分别是空函数、无参函数、有参函数

  1. 空函数

    当我们需要实现一个功能,但不知道如何用代码实现的时候,这个时候可以先写个空函数,然后先去实现其他的功能

    def func():
        pass
    
  2. 无参函数

    在函数定义阶段,括号内没有参数,为无参函数;定义的时候无参,那么调用的时候也不需参数。

    如果函数体代码逻辑不需要依赖外部传入的值,就必须得定义成无参函数。

    def func():
        print('Hello World')
    
    func()	#Hello World
    
  3. 有参函数

    在函数定义阶段,括号内有参数,称为有参函数;定义的时候有参,那么调用的时候就必须传入参数。

    如果函数体代码逻辑需要依赖外部传入的值,就必须得定义成有参函数。

    def add(x, y):
        '''求和'''
        res = x + y
        print(res)
    
    add(1, 2)	#3
    

函数的参数

之前我们讲了参数,那么什么是参数,参数是函数体接受外部传值的一种媒介,其实参数就是一个变量名。

那么我们就来讲讲这个参数。

  1. 首先要讲的是参数,参数分为形参和实参。

    1.1形参:在函数定义阶段,括号内定义的参数,称为形式参数,简称形参,本质就是变量名。

    1.2实参:在函数调用阶段,括号内传入的参数,称为实际参数,简称实参,本质就是变量名。

  2. 然后要讲的就是位置参数了,位置参数分为位置形参和位置实参。

    2.1位置形参:在函数定义阶段,按照从左到右的顺序依次定义的形参,叫位置形参。

    2.2位置实参:在函数定义阶段,按照从左到右的顺序依次定义的实参,叫位置实参。

    这个位置形参和位置实参,要从左到右一一对应的接受值和传值,不能多也不能少。

  3. 第三个要讲的就是默认形参了。

    默认形参,在定义阶段,就已经被赋值了。

    那么我们调用的时候可以不用传参,可以使用默认值,如果传参了那就使用传的值。

    但是默认形参必须放在位置形参的后面。

  4. 最后一个要说的就是关键字实参了。

    关键字实参:在调用函数的时候,按照形参名给具体的值,称为关键字实参。

    关键字实参可以打破位置形参必须一一对应传值的规定,但是关键字实参必须放在位置实参的后面。

总结一下,我们在定义函数的时候,参数最好不要超过3个,一般时候用位置形参和位置实参,默认形参和关键字实参在需要用的时候使用。

函数的返回值

返回值:函数内部代码经过一些逻辑处理获得的结果。

当我们需要对函数的处理结果做进一步的处理的时候,就需要函数必须要有返回值了。

函数的返回值用return来返回。

return是函数结束的标志,当函数执行到return,函数就会终止。

return的返回值可以返回任意数据类型。

return的返回值没有个数限制,可以使用逗号隔开返回多个值,不加括号返回多个值时,默认用元组的形式返回,没有返回值,会返回None。

原文地址:https://www.cnblogs.com/yunluo/p/11322160.html