目录
8.1 测试模块:if __name__ == '__main__':
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 功能去导入使用。