变量的作用域:
全局变量:在函数定义和类之外申明的变量,作用域为定义的模块,从定义位置开始,模块结束, 全局变量降低了函数的可读性和通用性,应尽量减少使用,一般是作为常量。
局部变量: 在函数中申明的变量,引用更快
全局变量中a = 8 会一直保留下去,但局部变量中,a = 8 只有在调用test( )函数时才成立。
如果要在函数内改变全局变量的值,使用global申明
参数的传递
函数的参数传递就是从实参到形参的赋值操作。在python中,一切都是对象,所有赋值操作都是对值的引用,所以当参数传递值时,传递的不是值本身。对可变对象的操作直接作用于对象,而对不可变的对象,会先创建一个新对象空间,然后对这个新空间操作。(不可变对象:数字,字符,元组,布尔值,函数)
浅拷贝和深拷贝
浅拷贝中拷贝对象的引用,深拷贝会把拷贝对象的内存也拷贝掉。
参数默认按位置顺序传递,个数与形参匹配,称为位置参数,也可以手动为参数设置默认值,如果参数找不到对应的位置的值就会使用默认值。此外,通过将参数命名来匹配位置
可变参数
Def f1(a,b,*c),*c是一个元组,可表示任意数量的参数,**c则对应一个字典
Lambda表达式和匿名函数
Lambda表达式可以用于申明匿名函数,只允许包含一个表达式,不能含有复杂语句
基本语法
Lambda arg1,arg2,arg3: 函数表达式,其中arg为参数
Eval()函数:可以用于把字符串str当成表达式求值
Eval(source[,global[,locals]] - > value
Source:表达式 globals:可选,必须是字典 locals:可选,任意映射对象
递归函数
递归函数指函数在内部直接或间接的调用自己,包含递归条件和递归步骤两部分