函数作用域:
变量搜索顺序:先局部再全局(从小往大),内部和全局变量名相同时使用函数只使用函数里面的变量
全局变量:函数设立前赋值的变量
局部变量:函数内设立的变量
访问:外部不能直接访问内部,执行函数时return不能访问return前赋值的变量,内部能访问外部
修改:局部不能改全局,全局能改局部,因为全局不仅影响设立的新函数还要影响其他条件
局部修改全局变量需要加global(改全局)
函数嵌套局部的局部时修改局部时,需要加nonlocal(改局部,内层修外层)
global和nonlocal都是把外拉进内
匿名函数:(与三目函数同类)可以不用使用def的函数
函数一般用类似于map、filter等,函数(lambda 参数 : 表达式,可迭代对象),函数套进函数中用
这样不用提前创造一个新的函数条件
闭包:(二级命令含有return加嵌套函数本身,且如果涉及主函数的变量被子函数修改而不是调用,则必须要用到nonlocal否则无法调用)
包是函数嵌套函数,闭包是外部函数与所嵌套的内部函数沟通的桥梁
使用方式外部函数加return加内部函数,用外部函数赋值变量,再次调用会执行’变量()‘,即可内部函数
先变量(函数()),再变量(),相当于((函数())(加数值))执行外部函数再执行内部函数的函数体(print的功能代码,而不是return代码)
递归:(函数自己调用自己,不用写循环条件),函数中的return加函数自身再加括号也是一种递归
递归需要终止条件,否则会循环下去达到递归深度然后报错或黑屏
回调函数:
自身是一个函数,一个函数被传入到另一个函数中被调用,但调用不一定执行,主要看是否有条件完全限制这种情况就不是回调,半限制或不限制才算,就像创造了新函数在后续用到了才是回调
在闭包中使用回调函数也可以
函数中有‘· · ·’是对函数进行说明,help(函数)时会显示出来
闭包要嵌套函数,回调不嵌套函数
return加函数自身加括号时为递归,不加括号时且属于子函数为闭包