(一)函数的定义和调用
1,函数基础知识
2,函数的参数传递
(1)形参与实参
(2)参数的类型
关键字参数:参数的名称必须和 函数定义的参数名称 相同
若采用混合方式传递参数: 若位置参数在关键字参数之后,程序会报错;反过来不会报错
默认值参数形式:def happy_birthday(name="abc",age=18) #即形参已给定数值
注意项:
①【函数定义时】,形参存在位置参数和默认值参数时,默认值参数放在最后
(3)长度可变的参数
可变位置参数:注意 列表传递 的 解包操作,前加*
可变关键字参数:注意 直接传递字典 的 解包操作,前加**
#个数可变的位置参数
def fun(*para):
print(type(para))
for item in para:
print(item)
fun(10,20,30,52) #输出时tuple类型,(10,20,30,52)
fun(10) #输出tuple类型,(10)
fun([10,20,30]) #输出tuple类型,[10,20,30],元组只有一个元素且元素类型时列表
fun(*[10,20,30]) #实参前加*号将列表进行解包,输出是(10,20,30)
#个数可变的关键字参数
def fun2(**ecpara):
print(type(ecpara))
for key,value in ecpara.items():
print(key,value)
fun2(name="abc",age=18,height=180,weight=160) #输出dict类型
#直接穿字典类型dict
d={"name":"abc","age":18,"height":180,"weight":160}
fun2(**d) #类似字典的解包,即可穿字典类型
(4)函数的参数总结
(5)函数的返回值
(6)变量的作用域
(7)递归函数
(二)Bug的介绍
1,Bug简介和分类
Bug的由来:
某人在用第一部计算机写程序时,一致出现错误,因此他拆开计算机发现有个虫子卡在寄存器中,成为Bug,排除错误debug
(1)是因为input()函数会将输入内容转为str类型,str不能与int比较,故语法错误
(2)是因为未给 i 赋值,print是中文括号,循环体内没有改变循环变量的语句
对于逻辑不清晰的Bug调试采用: ①使用print()函数输出检验 ②使用“#”暂时注释部分代码
2 ,针对被动掉坑(上图),python具有的异常处理机制:
(1)使用 try-except 结构
BaseExceptiom 是最基础最大的异常报错 ,是最大的父类
BaseException as e:是将该模块用作别名 e
(2)使用try-except-else结构
(3)使用try-except-else-finally结构
finally模块:常用来释放try块中申请的资源
*后面的 文件处理关闭 和 数据库的连接 都会 放在finally模块中
try-except-else-finally结构 相较于前两种是 较为完整的处理程序异常的结构
3,python中常见的异常类型
(1)traceback模块的使用
import traceback
try:
print("---------------")
print(1/0)
except:
traceback.print_exc() #打印错误信息
traceback模块 作用:用该模块打印错误信息,可能会存入到文件当中放到日志中成为log日志