'''
时间: 9月5日 - 9月30日
要求:
1. 书本内容总结归纳,整理在博客园笔记上传
2. 完成所有课后习题
注:“#” 后加的是备注内容
(每天看42页内容,可以保证月底看完此书)
“重点笔记”“本章习题” - 标题1,二级标题用- 标题2,笔记大纲标题、习题题目- 加粗,16px
'''

重点笔记

一. 函数设计概念

  • 耦合性: 对于输入使用参数并且对于输出使用return语句  1
  • 耦合性: 只有在真正必要的情况下使用全局变量
  • 耦合性: 不要改变可变类型的参数,除非调用者希望这样做
  • 聚合性: 每一个函数都应该有一个单一的、统一的目标
  • 大小:    每一个函数应该相对较小
  • 耦合:    避免直接改变在另一个模块文件中的变量

(注:耦合性 也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。)

二. 递归函数

  递归可以要求遍历任意形状的结构。

  

def sumtree(L):
total = 0
for x in L:
if not isinstance(x,list):
total += x
else:
total += sumtree(x)
return total
L = [1,[1,[2,3],4],5]
print(sumtree(L))

注:

isinstance(object, classinfo)
如果参数object是classinfo的实例,或者object是classinfo类的子类的一个实例, 返回True。如果object不是一个给定类型的的对象, 则返回结果总是False。

三. 匿名函数:lambda

  lambda表达式创建了一个之后能够调用的函数,但是它返回了一个函数而不是将这个函数赋值给了一个变量名。

  • lambda 是一个表达式,而不是一个语句
  • lambda 的主体是一个单个的表达式,而不是一个代码块

  除了这些,def和lambda都能够做同样种类的工作。

四. 为什么使用lambda

  lambda起到了函数速写的作用,允许在使用的代码内嵌入一个函数的定义。

五. 在序列中映射函数: map

  map函数会对一个序列对象中的每一个元素应用被传入的函数,并且返回一个包含了所有函数调用结果的一个列表。

  

>>> l = [1,2,3]
>>> def add(x): return x + 10 >>> list(map(add,l))
[11, 12, 13]

  由于map期待传入一个函数,它恰好是lambda通常出现的地方之一:

>>> list(map(lambda x : x+10,l))
[11, 12, 13]
>>> list(map(pow,[1,2,3],[1,2,3]))
[1, 4, 27]

六. 函数式编程工具: filter 和reduce

  map函数是用来进行函数式编程的这类工具中最简单的内置函数代表: 函数式编程的意思就是对序列应用一些函数的工具。

>>> list(filter((lambda x :x > 0), range(-5,5)))#return great more zero
[1, 2, 3, 4]

  reduce

>>> from functools import reduce
>>> reduce((lambda x,y : x+y),[1,2,3,4,5])
15

  此外,内置的reduce还允许一个可选的第三个参数置于序列的各项之前,从而当序列为空时充当一个默认的结果。

>>> import operator,functools
>>> functools.reduce(operator.add,[2,12,5])
19

本章习题:

1. lambda表达式和def语句有什么关系?

答:lambda和def都会创建函数对象,以便稍后调用。但是,lambda是表达式,可以嵌入函数定义的def语法上无法出现的地方。

  lambda的使用,总是可以用def来替代,并且通过变量名来引用函数。

  语法上来看,lambda只允许单个返回值表达式,因为它不支持代码块,不适用于较大的函数。

2. 使用lambda的要点是什么?

答:lambda允许“内联”小单元可执行代码,推迟其执行,并且以默认参数和封闭作用域变量的形式为其提供状态。lambda不是必须的,总是可以被def替代。它通常出现在GUI这样的基于回调的程序中,并且它们与map和filter这些期待一个处理函数的函数工具密切相关。

3. 比较和对比map、filter和reduce

答:map把每一项传递给函数并收集结果

  filter收集那些函数返回一个True值的项

  reduce 通过对一个累加器和后续项应用函数来计算一个单个的值。

4. 什么是函数注解,如何使用它们?

答:Python为声明注解提供了特殊的语法,但是,它本身不做任何事情,注解完全是可选的,并且出现的时候只是直接附加到函数对象__annotations__属性以供其他用户使用。

5. 什么是递归函数,如何使用它们?

答:递归函数调用本身可以直接地或间接地进行,从而实现循环。它们可以用来遍历任意形状的结构,但是,也可以用来进行一般性迭代。

6. 编写函数的通用设计规则是什么?

答:函数通常应该较小,尽可能自包含,拥有单一的,统一的用途,并且与输入参数和返回值等其他部分通信。

《Python 学习手册4th》 第十九章 函数的高级话题的更多相关文章

  1. 《Python 学习手册4th》 第十七章 作用域

    ''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...

  2. 《Python 学习手册4th》 第十三章 while和for循环

    ''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...

  3. 《Python 学习手册4th》 第七章 字符串

    ''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...

  4. 《Python 学习手册4th》 第六章 动态类型简介

    ''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书)“重点笔 ...

  5. 《Python 学习手册4th》 第四章 介绍Python对象类型

    ''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容(每天看42页内容,可以保证月底看完此书) ''' ...

  6. 流畅python学习笔记:第十九章:动态属性和特性

    首先来看一个json文件的读取.书中给出了一个json样例.该json文件有700多K,数据量充足,适合本章的例子.文件的具体内容可以在http://www.oreilly.com/pub/sc/os ...

  7. 《Python 学习手册4th》 第十一章 赋值、表达式和打印

    ''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...

  8. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图 学习目标 理解为什么需要法线贴图: 学习法线贴图如 ...

  9. Python之路【第十九章】:Django进阶

    Django路由规则 1.基于正则的URL 在templates目录下创建index.html.detail.html文件 <!DOCTYPE html> <html lang=&q ...

随机推荐

  1. yafeilinux.com的开源项目非常好的东西

    转自:http://www.yafeilinux.com/?page_id=9 声明:我们网站的资源可以自由下载,转载,但是不能用作商业用途.如有问题请联系我们www.yafeilinux.com . ...

  2. python流程控制语句 ifelse - 3

    #! /usr/bin/python x = input ('please inut a integer:') x = int(x) : print ('你输入了一个负数') elif x == : ...

  3. Android:在eclipse中快速多行注释的方法

    http://blog.csdn.net/jianghuiquan/article/details/8534337 也许你能够记住以下部分快捷键,对你开发和设计过程中大裨益! 1.//注释添加和取消 ...

  4. javascript 网络是否连接的几种方案

    js   网络是否连接的几种方案 1.通过html5的新属性: window.onload = function () {            var isOnLine = navigator.on ...

  5. Ubuntu对FireFox安装flash插件

    有时候我们需要在Ubuntu下采用手动安装一些软件,比如Firefox的Flash插件.Adobe® Flash® Player 是一款轻量级浏览器插件,具有丰富的 Internet 应用运行时间,提 ...

  6. Volley HTTP库系列教程(2)Volley.newRequestQueue示例,发请求的流程,取消请求

    Sending a Simple Request Previous  Next This lesson teaches you to Add the INTERNET Permission Use n ...

  7. 《OD学oozie》20160813

    一.日志收集项目案例 1. oozie中依赖jar包 在工作目录下创建lib目录,上传依赖包的lib目录下 2. 作业 将日志收集与处理项目案例使用oozie的workflow执行 3. coordi ...

  8. hibernate自动生成映射文件

    映射文件是O/R Mapping的关键,相当于控制中心.当数据库表较多时,手动配置该映射文件非常耗时.为了快速开发程序,使开发人员的注意力集中到业务逻辑上来,Hibernate官方提供的MiddleG ...

  9. gulp some tips

    gulp作为替代grunt的task runner后起之秀,基于nodejs的stream操作模型,大大减少了对磁盘的操作因此大大提高了性能. gulp error handling var gulp ...

  10. ASP.NET 4.0 Webform Bundles 压缩css, js,为什么放到服务器不行

    参考文章: http://blog.csdn.net/dyllove98/article/details/8758149 文章说的很详细. 但是本地是可以完美展示(我的本地环境有4.0 也有4.5) ...