'''
时间: 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. Qt通过UDP传图片,实现自定义分包和组包

    一.包头结构体 //包头 struct PackageHeader { //包头大小(sizeof(PackageHeader)) unsigned int uTransPackageHdrSize; ...

  2. python xml.etree ElementTree解析 编辑 xml

    python有很多种xml解析方式,不过感觉etree的ElementTree 用起来最方便. #coding=utf-8 from xml.etree import ElementTree impo ...

  3. 【转】RESTful Web Services初探

    近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTful风格的Web Services,比较著名的包括Twit ...

  4. MyBatis学习总结_05_实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  5. uploadify+批量上传文件+java

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  6. zoj 3165 (最小割,最大点权独立集)

    胡伯涛的<最小割模型在信息学竞赛中的应用>写的真牛. 这道题是选择一些男孩和女孩参加party,邀请的男孩女孩之间不能有 8g,图就是个明显的二分图,就是选择一些点之间没有8g关系,就是二 ...

  7. centos 升级GCC/G++

    #get rep yum install centos-release-scl-rh #yum install centos-release-scl # install g++ 5.2.1 yum - ...

  8. HDU 1941 Hide and Seek(离散化+树状数组)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1941 题意:给出平面上n个点,找出一点p,使得距离p最近和最远的点的距离之差最小.输出这 ...

  9. BZOJ 3083 - 遥远的国度

    原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3083 说话间又一个多月过去了..该来除除草了,每天都是训练.没效率,训练.没效率..省选考 ...

  10. Mybatis返回插入的主键

    在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数:如果业务层需要得到记录的主键时,可以通过配置的方式来完成这个功能 情景一:针对自增主键的表,在插入时不 ...