Python基础教程Ch6-抽象

第6章 抽象

![](http://picture-repository-of-heamon7.qiniudn.com/Python基础教程-第6章 抽象.png)

第6章 抽象

6.1懒惰即美德

6.2抽象和结构

6.3创建函数

内建的callable函数可以用来判断函数是否可以调用,如callable(math.sqrt)

要给函数写文档,可以加入注释,也可以直接写上字符串。在函数(或模块,类)的开头写下字符串,它就会作为函数的一部分进行存储,称为文档字符串,用function.doc访问文档属性。在调用help函数是也会显示该信息

所有函数都返回了值,内部没有return的会返回None

6.4参数魔法

函数定义中的参数称为形式参数,调用函数时提供的函数是实际参数。

形式参数分为位置参数和关键字参数。前者位置很重要。后者可以在函数中给参数提供默认值

对于位置参数可以在最后一个参数前加一个,表示该参数以元组形式收集多余实参,对于关键字参数,可以在最后一个参数前加*,此时该参数以字典形式收集多余的关键字参数

收集参数的过程也可以反转过来,即在传递一个列表实参时,在前面加上一个*,则形参列表就可以得到相应个数的参数

6.5作用域

变量实际上和其值构成了一个不可见的字典,内建的vars()函数可以返回这个字典。这类不可见字典叫做命名空间或作用域。除了全局作用域外,每个函数调用都会创建一个新的作用域。

一般函数内可以直接访问全局变量,但是当需要访问同名全局变量时可以使用globals()函数,该函数类似vars()函数,类似的locals()函数返回局部变量的字典,若在局部作用域需要声明一个全局变量可以在变量前加上global参数

Python的函数可以嵌套,一个突出的应用就是可以用一个函数创建另一个函数。当外层函数返回内层函数时,并没有调用内层函数,所以返回的内层函数还可以访问它定义时所在的作用域,即它带着它的环境(和相关的局部变量)。类似于这样的函数存储子封闭作用域的行为叫做闭包

6.6递归

递归的过程中,每次调用函数都会用掉一点内存,足够的函数调用以后,空间就不够了,会以一个“超过最大递归深度"的错误返回

Python在函数式编程上有一些有用的函数

map函数将序列中的元素全部传递给一个函数,如map(math.sqrt,range(10))

filter函数可以基于一个返回布尔值的函数对元素进行过滤,如filter(func,list),返回其中为True的列表。某些可以用列表推导式代替

lambda表达式可以创建短小的函数,如filter(lambda x:x.isalnum(),list)

reduce函数一般来说不能轻松被列表推导式替代,它会将序列的前两个函数与给定的函数联合使用,然后将它们和第三个元素继续联合使用,直到整个序列都处理完毕,并返回一个最终结果。如:reduce(lambda x,y:x+y,[1,2,3])

你可能感兴趣的:(Python基础教程Ch6-抽象)