一.匿名函数:
即不再使用def语句这样标准的形式定义一个函数。
lambda----针对简单函数
-
语法规则:
lambda 参数 :表达式
#返回结果可被变量接收 -
简单函数:简单的函数, 可以不使用def定义一个函数,使用匿名函数即可
-
函数调用:类似 filter, map 等函数里面,可以使用匿名函数使用
二.函数作用域
-
函数外部不能访问函数内部变量
报错
-
函数内部能访问函数外部变量
-
函数内部不能修改函数外部变量
函数返回2 但x的值仍为1
-
函数里和函数外变量名相同,id不同
三.全局变量与局部变量
1.全局变量
关键字:global
2.局部变量
一般在嵌套函数中使用
关键字:nonlocal
def func():
x = 123
def func_no():
nonlocal x # 声名局部变量,不声明会直接报错
x += 1
return x
return func_no()
3.总结:
-
函数内部变量, 作用域在函数内部,函数内部不可以直接更改函数外部变量
-
global: 函数内部如果需要改变全局变量, 就需要用global修饰变量
-
nonlocal: 在嵌套函数的情况下
四.闭包
-
闭包是函数里面的嵌套函数,外层函数返回里面层函数,这种称之为闭包
-
闭包是概念,不是函数类型,和递归类似,是一种特殊的函数调用
-
闭包可以得到外层函数的局部变量,是函数内部与外部沟通的桥梁
1.内嵌函数
闭包的半成品
2.闭包
五.递归
函数自己调用自己,有限制次数
阶乘:运行4321
第一次返回4func(3) 4321
第二次返回3func(2) 321
第三次返回2func(1) 21
第四次返回1 x等于1 停止递归
注意:递归中可以函数自己调用自己,但是与条件循环一样,需要终止条件
特点:
使用递归时,常常可以使代码更加简洁
递归会占用比较多的内存,当递归次数比较多时,性能会降低,因此不建议多次使用
六.回调函数
1.概念
回调函数:自身是一个函数,只是被传入另一个函数中,供其使用
回调函数不一定会被调用,是否调用以及有被传入。函数的内部逻辑决定
2. 举例
fun2为回调函数,当作参数传入func中, func中callback()即为func2()
补充
if name == ‘main’
写的脚本模块既可以导入其他模块使用,也可以在该模块使用