Python学习手册(第四部分)
Posted xhjh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习手册(第四部分)相关的知识,希望对你有一定的参考价值。
第16章 函数基础
- def可以出现在任一语句可以出现的地方——甚至是嵌套在其他的语句中。函数仅仅是对象,在程序执行时清楚的记录在内存中,除调用之外函数允许任意的属性附加到记录信息以供随后使用:
def func():...
func()
func.attr = value
第17章 作用域
- 变量名引用分为三个作用域进行查找:首先是本地,之后是函数内,之后全局,最后是内置。
- 在默认情况下,变量名赋值会创建或者改变本地变量。
- 全局声明和非本地声明将赋值的变量名映射到模块文件内部的作用域。
- global并不是一个类型或大小的声明,它是一个命名空间的声明,生成一个或多个全局变量名。也就是说,存在于整个模块内部作用域的变量名。global使用作用域查找从嵌套的模块的作用域开始,并且允许对那里的名称赋值。如果名称不存在于该模块中,作用域查找继续到内置作用域。
- nonlocal限制作用域查找只是嵌套的def,要求名称存在于那里,并且允许对它们赋值,作用域查找不会继续到全局或内置作用域。在python2.6中,对嵌套的def作用域名称的引用是允许的,但不能对其赋值。然而,可以使用带有显示属性的类来实现与nonlocal相同的可改变的状态信息的效果。
第18章 参数
- 参数的传递是通过自动将对象赋值给本地变量名来实现的。
- 在函数内部的参数名的赋值不会影响调用者。
- 改变函数的可变对象参数的值也行会对调用者有影响。
- 不可变参数“通过值”进行传递,可变对象是通过“指针”进行传递的。
在python3.0及以后的版本中,跟在*name或一个单独的*之后的、任何正式的或默认的参数名称,都是keyword-only参数,并且必须在调用中按照关键字传递。
- 在函数调用中,参数必须以此顺序出现:任何位置参数,后面跟着任何关键字参数(name=value)和*sequence形式的组合,后面跟着**dict形式。
- 在函数头部,参数必须以此顺序出现:任何一般参数,紧跟着任何默认参数,如果有的话,后面是*name(或者在python3.0中是*)的形式,后面跟着任何name或name=value keyword-only参数,后面跟着**name形式。
第19章 函数的高级话题
匿名函数:lambda
lambda表达式
lambda arg1, arg2, … argn : expression using args
在序列中映射函数:map
map函数会对一个可迭代对象中的每个元素应用传入的函数,并且返回一个包含了所有函数调用结果的一可迭代对象。
函数式编程工具:filter和reduce
filter基于某一测试函数过滤出一些元素,返回的是一个可迭代对象,reduce对每个元素都应用函数累计并运行到最后结果。
第20章 迭代和解析 第二部分
生成器函数:生成器函数自动在生成值的时刻挂起并继续函数的执行,yield语句挂起该函数并向调用者发送回一个值,但是保留足够的状态以使得函数能够从它离开的地方继续。
yield是一个表达式的形式,可以返回传入的元素来发送,而不是一个语句,表达式必须包含在括号中,除非它是赋值语句右边的唯一一项。
生成器表达式:在语法上和一般的列表解析一样,但是生成器表达式是括在圆括号内而不是方括号内。
生成器是单迭代器对象
python3.0解析语法概括
- 对于集合,新的常量形式1,3,2等同于set([1,3,2]),并且新的集合解析语法f(x) for x in S if P(x)就像是生成器表达式set(f(x) for x in S if P(x)),其中f(x)是一个任意的表达式。
- 对于字典,新的字典解析语法key: val for (key, val) in zip(keys, vals)像dict(zip(keys, vals))形式一样工作,并且x:f(x) for x in items像生成器表达式dict((x, f(x)) for x in items)一样工作。
函数陷阱
- python是静态检测python的本地变量的,当编译def代码时,不是通过发现赋值语句在运行时进行检测的。如果在函数中先引用一个未定义变量名,然后接下来对该变量赋值则会导致未定义错误。
- 默认参数是在def语句运行时评估并保存的,而不是在这个函数调用时。每个默认参数保存成一个对象,附加在个函数本身,对于可改变的默认参数,在函数每次调用时都会对其进行改变。
以上是关于Python学习手册(第四部分)的主要内容,如果未能解决你的问题,请参考以下文章
求《Python学习手册》(第四版)中文版pdf,万分感谢!