《Python 学习手册4th》 第十九章 函数的高级话题
'''
时间: 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))
注:
三. 匿名函数: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》 第十九章 函数的高级话题的更多相关文章
- 《Python 学习手册4th》 第十七章 作用域
''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...
- 《Python 学习手册4th》 第十三章 while和for循环
''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...
- 《Python 学习手册4th》 第七章 字符串
''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...
- 《Python 学习手册4th》 第六章 动态类型简介
''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书)“重点笔 ...
- 《Python 学习手册4th》 第四章 介绍Python对象类型
''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容(每天看42页内容,可以保证月底看完此书) ''' ...
- 流畅python学习笔记:第十九章:动态属性和特性
首先来看一个json文件的读取.书中给出了一个json样例.该json文件有700多K,数据量充足,适合本章的例子.文件的具体内容可以在http://www.oreilly.com/pub/sc/os ...
- 《Python 学习手册4th》 第十一章 赋值、表达式和打印
''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图 学习目标 理解为什么需要法线贴图: 学习法线贴图如 ...
- Python之路【第十九章】:Django进阶
Django路由规则 1.基于正则的URL 在templates目录下创建index.html.detail.html文件 <!DOCTYPE html> <html lang=&q ...
随机推荐
- Swagger PHP使用指南
先说什么是Swagger, Swagger的使用目的是方便优美的呈现出接口API的各种定义, 生成API文档, 包括参数, 路径之类. 有时后端改了API的参数或者其他设置, 前端直接看这个Swagg ...
- iOS:UIMapView地图视图控件的简单使用
可以通过设置MKMapView的mapViewType设置地图类型 MKMapTypeStandard 普通地图 MKMapTypeSatellite 卫星云图 MKMapTypeHybrid 普通 ...
- Ubuntu 13.10 中文字体设置
据我查到的资料,在默认设置下,Ubuntu 13.10 中文使用的是文泉驿正黑.我总觉得它的效果有些发虚,模糊,不满意. (貌似是Ubuntu从13.04开始取消了默认的微米黑,回退为之前的正黑.这我 ...
- android程序获取WIFI的IP地址和MAC地址
转自:http://my.oschina.net/chenj/blog/68680 近日在鼓捣这玩意,拿出来大家分享一下,代码比较简单,如果有不懂的再问 <Button android:id=& ...
- java.lang.ClassNotFoundException: org.springframework.context.event.GenericApplicationListener ----good
Caused by: java.lang.NoClassDefFoundError: org/springframework/context/event/GenericApplicationListe ...
- c# 文件简繁体转换
C# 文件简繁体转换 简繁体转换: 方案一: 准确性高,耗性能 方案二: 准确性低,效率高 1 using Microsoft.International.Converters.Tradition ...
- javascript ajax的语法
ajax参数: 详细参数转到如下地址: http://www.w3school.com.cn/jquery/ajax_ajax.asp $.ajax语法: jQuery.ajax([settings] ...
- Case 架构的实际应用-2
Test Plan in TestLink 1. For new release, we will create 2 test plans for each project 2. 1st test p ...
- Linux下安装Python-3.3.2【转】
# 下载最新版本 cd /usr/local/src/ sudo wget http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tar.bz2 su ...
- Eclipse下运行Maven项目提示缺少maven-resources-plugin:2.4.3
将一个手动创建的Maven项目(命令行下可正常运行)导入到Eclipse中,运行时提示这样的错误信息:[ERROR] Plugin org.apache.maven.plugins:maven-res ...