python--对函数的理解

函数的定义

def functionname(arg):

     Suite

     Return [expression]

1.def 定义函数时的关键字

2.functionname 函数名

3.arg函数的参数名,传入不同的参数,返回值也不同,通过参数的传递使函数的功能得以实现。

4.Suite是实现函数功能的代码段

5.return 后面接的表达式就是函数的返回。

函数的调用

functionname(arg)  函数名(参数)

函数被调用后返回的就是return表达式的值

函数调用时的参数要严格按照函数定义的时候的参数来进行传递。

Return 后面接的是表达式,不能接赋值语句。

函数的参数

必备参数:(函数定义时)

函数的参数在定义时只有参数名,没有值,这种定义的方式使得函数调用时一定得传入参数才能够正常的调用函数。必备参数的个数和顺序必须是和定义时是一致的,除非调用时使用了关键字参数就可以改变参数顺序传入。

默认参数:(函数定义时)

函数的参数在定义时给出了初始值,这时参数在调用时如果不传入值给这个参数,函数就会使用定义时的默认值,如果传了值进来给这个参数,那么默认值就会被丢弃而使用你传进来的这个值。

关键字参数:(函数调用时)

关键字参数是指的在函数调用的时候,传参时把定义函数时参数名和对应的值一起传入函数中,这时传入的参数的顺序就不用考虑了。

不定长参数:(定义和调用都可以用)

函数在定义时不确定要传入的参数的个数时使用

*args 代表元组,args是元组的名字,传入的值就是这个元组的元素,这种参数不接受关键字参数。

**kwargs 代表字典,kwargs是这个字典的名字,调用时使用关键字参数,把参数作为字典的元素,参数名为字典的键,参数值为字典的值。

这两种参数可以同时使用,但必须*args在前面,kwargs在后面,函数调用时要把直接传的值放在关键字参数的前面。

*args和**kwargs也可以在函数调用时的使用。

当我们清楚了函数定义时参数的个数和顺序时,我们可以把需要传入的参数组合成元组,使用*+元组名进行传参来调用函数。

我们把需要传递进去的参数的参数名作为字典的键,参数的值作为字典的值,再把这个由需要传递的进去的参数组成的字典用**+字典名进行传参来调用函数

 

注:调用函数时参数要根据函数定义时的参数的个数和类型进行值的传递时,一定要清楚在函数定义时参数是什么类型的参数,只有传进去的参数能与定义时相匹配才能正确的调用返回函数的返回值。

 

全局变量和局部变量

定义:

全局变量:定义在函数外的拥有全局作用域的变量,可以在整个程序范围内访问

全局变量可以在函数内被访问但不可以在函数内被修改。

局部变量:定义在函数内部的拥有一个局部作用域的变量,只能在其被声明的函数内部访问。

 

变量的作用域:

变量的在哪里被赋值的就决定了这个变量作用的区域。

 

global关键字:

在函数内使用global 关键字申明这个变量是全局变量,使用global在这个函数内对这个变量进行修改时,会使得每次调用这个函数时都会修改这个全局变量的值。

匿名函数

基本形式:

lambda arg : expression

使用关键字lambda,arg是函数参,expression是匿名函数的返回值

它既不能包含控制结构也没有return语句,返回的值就仅仅是表达式计算后得到的值。

使用lambda可以省下函数定义的过程,可以使得代码更加精简。

对于有些只需要使用一两次的函数,使用lambda也就不需要考虑函数命名的问题。

内置函数 filter,map

内嵌函数和闭包

概念

函数里面再嵌套一个函数,外面的函数的的返回值return里面的函数,这时里面的函数可以访问到外面这个函数的的变量,在函数外部我们不能直接调用里面的函数,但能通过外面函数的返回值来调用里面的函数,我们称这种现象为闭包。

装饰器

使用函数的嵌套,外层函数传进来的参数是一个函数对象,里层函数对传进来的这个函数进行加工处理后再返回处理后的函数。

 

递归函数

回调函数

posted on 2017-03-14 12:02  梦魇一生  阅读(699)  评论(0编辑  收藏  举报