函数参数—必选参数
必选参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
注意:必选参数必须和声明时的数量和位置一致,不然会报错。
函数参数—默认参数
调用函数时,缺少参数的值如果没有传入,则被认为是默认值。
函数参数—可变参数—元组
在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。参数组装成一个tutple。
函数参数—可变参数—字典
变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
函数参数—关键字参数
对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过kw检查。
它可以扩展函数的功能。比如,在person函数里,我们保证能接收到name和age这两个参数,但是,如果调用者愿意提供更多的参数,我们也能收到。
注意:如果要限制关键字参数的名字,就可以用命名关键字参数
函数参数—参数组合
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:
必选参数、默认参数、可变参数
变量作用域
一个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。
两种最基本的变量作用域如下:
局部变量:局部变量,就是在函数内部定义的变量。不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响。局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储,这就是它的作用。
全局变量:如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量。如果要再函数中修改全局变量,使用global声明。
全局和局部变量重名:如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量。
变量作用域小结:
在函数外边定义的变量叫做全局变量
全局变量能够在所以的函数中进行访问
如果在函数中修改全局变量,那么就需要使用global进行声明
如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的,
小技巧强龙不压地头蛇
递归函数
如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。
满足递归的条件:
1.有循环的内容
2.有跳出的条件
递归默认是有递归深度要求的。
使用递归要注意的有两点:
1、递归就是在过程或函数里面调用自身
2、在使用递归时,必须有一个明确的递归结束条件,称为递归出口.
递归分为两个阶段:
1、递推:把复杂的问题的求解推到比原问题简单一些的问题的求解
2、回归:当获得最简单的情况后,逐步返回,依次得到复杂的解.
迭代:利用变量的原值推算出变量的一个新值.如果递归是自己调用自己的话,迭代就是A不停的调用B.
递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换.能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出.使用的时候要慎重。
匿名函数
用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
lambda函数的语法只包含一个语句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
注意:Lambda函数能接收任何数量的参数但只能返回一个表达式的值。一般,执行一次,或者作为参数传递。省的定义再调用。直接定义加调用。