- 定义
- 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
- 特性
- 减小重复代码
- 使程序变的可扩展
- 易维护
- 函数参数
- 定义函数可以带参数,也可不带参数
- 形参:只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数则不能再使用该形参变量
- 实参:可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
- 默认参数
-
1 def stu_register(name,age,course,country="CN"):#代码中country即为默认参数,当调用函数时,如果country不指定的话,则默认为“CN”,指定了的话,为指定的数#在定义函数时,默认参数要放在最后面
- 关键参数
- 正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只要指定参数名即可(指定了参数名的参数就叫关键参数)
- 关键参数必须放在位置参数(以位置顺序确定的高对应关系的参数)之后
-
1 def stu_register(name, age, course=‘PY‘ ,country=‘CN‘): 2 3 #调用 4 stu_register("王山炮",course=‘PY‘, age=22,country=‘JP‘ ) 5 6 #不可以用下面这两条 7 stu_register("王山炮",course=‘PY‘,22,country=‘JP‘ ) 8 stu_register("王山炮",22,age=25,country=‘JP‘ )
- 非固定参数
- 在定义函数时不确定用户想传入多少个参数,就可以使用非固定参数
- *args:def func(a,*args),传过来的所有参数打包成元组发送给args,通常放在最后,要不然会截胡
-
1 #方式一: 2 send_alert(‘报警‘,‘z‘,‘w‘,‘q‘,‘a‘) 3 #方式二:必须要带* 4 send_alert(‘报警‘,*(‘z‘,‘w‘,‘q‘,‘a‘)) 5 send_alert(‘报警‘,*[‘z‘,‘w‘,‘q‘,‘a‘])
- **kargs:def func(a,**kargs),会把多传入的参数变成一个字典形式发送给kargs
- return
- 终止函数,即使return后面还有代码,也不执行
- 若函数没有return的话,函数返回None
- 全局变量 & 局部变量
- 局部变量:在函数内部定义的变量为局部变量,作用域为定义该变量的函数
- 全局变量:在函数外,定义在函数外部一级代码的变量,全局能用,作用域为整个程序
- 全局变量不能调用局部变量
- 函数内部调用全局变量:只要函数内部没有和全局变量同名的局部变量即可
- 在函数内修改全局变量:在函数内定义:global name,实际项目中,不建议用global,一般情况下不用
- 在函数内部修改列表,可通过切片方式修改列表,如果要整体修改的话,就要使用global了
- 嵌套函数
- 函数内部可以再次定义函数
- 执行需要被调用
- 匿名函数
- 不需要显示指定函数名
-
1 calc = lambda x,y:x**y 2 print(calc(2,5))
- 高阶函数
- 接收一个或多个函数作为输入
- return返回另外一个函数
- 递归函数
- 在函数内部,可以调用其他函数,如果一个函数在内部调用自身函数,这个函数就是递归函数
- 两个基本要素,只有具备了这两个基本要素,才能在有限次计算后得出结果
- 边界条件:确定递归到何时终止,也称为递归出口。
- 递归模式:大问题是如何分解为小问题的,也称为递归体。
-
1 def func(n): 2 if n == 1: 3 return 1 4 return n*func(n-1) 5 print(func(4))
时间: 2024-11-04 15:16:34