目录
1. 函数多返回值
2. 函数多种传参方式
3. 匿名函数
3.1 函数作为参数传递
3.2 lambda匿名函数
4. 文件的读取操作
4.1 open()打开函数
4.2 读操作方法
4.3 文件的写入
4.4 文件的追加
5. 异常的捕获方法
5.1 捕获常规异常
5.2 捕获指定异常
5.3 捕获多个异常
5.4 捕获异常并输出信息
5.5 捕获所有异常
5.6 异常else
5.7 异常的finally
6. 异常的传递
7. 模块的导入方式
8. 自定义模块
8.1 测试模块:if __name__ == '__main__':
8.2 __all__
1. 函数多返回值
按照返回值的顺序,写多个变量接收,变量之间用逗号隔开,支持不同类型的数据return。
2. 函数多种传参方式
共有4种常见的传参方式:
- 位置参数
- 关键词参数
- 缺省参数
- 不定长参数
——————————————————
- 位置参数
位置参数:调用函数时根据函数定义的参数位置来传递参数。
注意:传递的参数和定义的参数的顺序及个数必须一致。
- 关键字参数
关键字参数:函数调用时通过“键=值”的形式传递参数。
由上可知,关键字参数不需要参数的顺序一致,以键值对的形式传递。
- 缺省参数
缺省参数:缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)。
作用:当调用函数时没有传递参数, 就会使用默认是用缺省参数对应的值。
注意:函数调用时,如果为缺省参数传值则修改默认参数值, 否则使用这个默认值。
- 不定长参数
不定长参数:不定长参数也叫可变参数. 用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。
作用:当调用函数时不确定参数个数时, 可以使用不定长参数。
不定长参数的传递类型:
- 位置传递
- 关键字传递
位置传递:
注意:传过去的所有参数都会被args变量收集,它会根据传过来的参数的位置合并为一个元组,args是元组类型。
关键字传递:
注意:参数是“键=值”的形式,所有的“键=值”都会被kwargs接收,同时组成一个字典。
3. 匿名函数
3.1 函数作为参数传递
这是一种计算逻辑的传递,而非数据的传递。
3.2 lambda匿名函数
函数的定义中:
- def关键字,可以定义带有名称的函数
- lambda关键字,可以定义匿名函数(无名称)
有名称的函数可以通过名字多次使用;无名称的匿名函数,只可以临时使用一次。
匿名函数定义依法:lambda 传入参数:函数体(一行代码)
- lambda是关键字,表示定义的是匿名函数
- 传入参数表示匿名函数的形参,如:x,y表示接收两个参数
- 函数体,就是函数的执行逻辑,注意:只能写一行,无法写多行代码
4. 文件的读取操作
4.1 open()打开函数
语法:open(name,mode,encoding)
- name:是要打开的文件名的路径。
- mode:设置打开文件的模式:只读、写入、追加。
- encoding:编码格式(常用UTF-8)。
mode常用的三种访问模式:
4.2 读操作方法
- read()方法:
文件对象.read(num)
num表示要从文件中读取的数据长度(单位是字节),如果没有传入num,就读取文件中的所有数据。
- readlines()方法:
readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
- readline()方法:
一次读取一行的内容。
- for循环读取文件:
- close()关闭文件对象
————————————————————
- with open语法:
该方法可以在操作完成后自动关闭close文件,避免遗忘close方法。
4.3 文件的写入
例子:
- 直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区。
- 当调用flush的时候,内容会真正写入文件。
- 这样做是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写磁盘)。
注意:用‘w’模式时,文件如果不存在,则会创建新文件;文件如果存在,会将原来的所有内容清空。close()方法自带flush()方法的功能。
4.4 文件的追加
- a模式下,文件不存在会创建文件
- a模式下,文件存在会在文件的最后追加写入新内容
5. 异常的捕获方法
捕获异常的作用:提前假设某处会出现异常,做好提前准备,当真的出现异常的时候,可以有后续的手段。
5.1 捕获常规异常
基本语法:
try:
可能发生错误的代码
except
如果出现异常时执行的新代码
例如:
5.2 捕获指定异常
基本语法:
try:
print(name)
except NameError as e:
print(“name变量名称未定义错误”)
注意:
- 如果尝试执行的代码的异常类型和要捕获的异常类型不一致时,则无法捕获异常。
- 一般try下方只放一行尝试执行的代码。
5.3 捕获多个异常
当捕获多个异常时,可以把要捕获的异常类型的名字,放到except 后,并使用元组的方式进行书写。
try:
print(1/0)
except (NameError,ZeroDivisionError):
print(“ZeroDivision错误。。。”)
5.4 捕获异常并输出信息
基本语法:
try:
print(num)
except (NameError,ZeroDivisionError):
print(e)
5.5 捕获所有异常
基本语法:
try:
print(num)
except Exception as e:
print(e)
5.6 异常else
else表示的是如果没有异常要执行的代码。
try:
print(num)
except Exception as e:
print(e)
else:
print(“没有异常执行的代码”)
5.7 异常的finally
finally表示的是无论是否异常都要执行的代码,例如关闭文件。
try:
f = open('123.txt','r')
except Exception as e:
f= open('123.txt','w')
else:
print(“没有异常”)
finally:
f.close()
————————————————————————
6. 异常的传递
异常是具有传递性的,当所有函数都没有捕获异常的时候,程序就会报错。
7. 模块的导入方式
- import 模块名:导入整个模块
-
from 模块名 import 功能名:导入模块的某个方法
-
from 模块名 import *:导入模块的所有方法
-
import 模块名 as 别名:将模块取个别名
-
from 模块名 import 功能名 as 别名:将模块的某个功能取个别名
8. 自定义模块
每个Python文件都可以作为一个模块,模块的名字就是文件的名字. 也就是说自定义模块名必须要符合标识符命名规则。
注意:当导入多个模块时,且模块中有同名的功能,当调用这个功能的时候,默认调用到的是最后一个导入的模块的功能。
8.1 测试模块:if __name__ == '__main__':
当一个模块中想要添加一些测试信息时,有不想这些测试信息在调用时被运行,就用到了我们的测试模块:
8.2 __all__
如果一个模块文件中有`__all__`变量,当使用`from xxx import *`导入时,只能导入这个列表中的元素。
当要使用'__all__'变量之外的功能时,可以直接用from 模块 import 功能去导入使用。