Python Learning Note Day 13

PS:明天清明节,一个不是很开心的节日,愿那些离我们而去的人都安好,此生有缘相逢,来世必当再见。

照例,许嵩的《清明雨上》走起。

 

今天是Python学习第十三天,主要内容是对函数部分的补充,今天内容较少,做了一会儿灰机大战的项目。

补充知识

1.文档字符串

放在函数开头的字符串称为文档字符串(docstring),将作为函数的一部分存储起来。

使用.__doc__方法可以得到文档字符串

特殊的内置函数help很有用。在交互式解释器中,可使用它获取有关函数的信息,其中包含函数的文档字符串。

2. 作用域

有一个名为vars的内置函数,它返回这个不可见的字典。这种“看不见的字典”称为命名空间或作用域(namespace)。

如果需要,可使用函数globals来访问全局变量。这个函数类似于vars,返回一个包含全局变量的字典。(locals函数返回一个包含局部变量的字典。)

重新关联全局变量

3. 闭包

在这里,一个函数位于另一个函数中,且外面的函数返回里面的函数。也就是返回一个函数,而不是调用它。重要的是,返回的函数能够访问其定义所在的作用域。换而言之,它携带着自己所在的环境(和相关的局部变量)!每当外部函数被调用时,都将重新定义内部的函数,而变量factor的值也可能不同。由于Python的嵌套作用域,可在内部函数中访问这个来自外部局部作用域(multiplier)的变量,这样存储其所在作用域的函数称为闭包

通常,不能给外部作用域内的变量赋值,但如果一定要这样做,可使用关键字nonlocal。 这个关键字的用法与global很像,让你能够给外部作用域(非全局作用域)内的变量赋值。

4. 递归

简单点说就是自己调用自己,最好的两个例子就是阶乘和幂。

阶乘:

不用递归可以这样来实现:

而使用递归之后的代码是这样的:

分析下,函数需要一个参数(即你要求阶乘的数),如果等于1,函数直接返回1(1的阶乘等于1),如果不等于1,调用自己,并且将n-1传给自己,在进行判断计算,直到最后n=1了从里向外计算,最终得到结果。 我的理解就是一个先钻进去,在钻出来的过程,所以递归一定会有一个结束递归的条件,这个程序中条件就是n==1的时候。

幂:

5. lambda表达式

lambda表达式让你能够创建内嵌的简单函数(主要供map、filter和reduce使用)。

6. 小结
本章介绍了抽象的基本知识以及函数。

抽象:抽象是隐藏不必要细节的艺术。通过定义处理细节的函数,可让程序更抽象。

函数定义:函数是使用def语句定义的。函数由语句块组成,它们从外部接受值(参数),并可能返回一个或多个值(计算结果)。

参数:函数通过参数(调用函数时被设置的变量)接收所需的信息。在Python中,参数有两类:位置参数和关键字参数。通过给参数指定默认值,可使其变成可选的。

作用域:变量存储在作用域(也叫命名空间)中。在Python中,作用域分两大类:全局作用域和局部作用域。作用域可以嵌套。

递归:函数可调用自身,这称为递归。可使用递归完成的任何任务都可使用循环来完成,但有时使用递归函数的可读性更高。

函数式编程:Python提供了一些函数式编程工具,其中包括lambda表达式以及函数map、filter和reduce。

7. 新函数

函数描述
map(func, seq[, seq, …])对序列中的所有元素执行函数
filter(func, seq)返回一个列表,其中包含对其执行函数时结果为真的所有元素
reduce(func, seq[, initial])等价于 func(func(func(seq[0], seq[1]), seq[2]), …)
sum(seq)返回 seq 中所有元素的和
apply(func[, args[, kwargs]]) )调用函数(还提供要传递给函数的参数

 

 

 

点赞
  1. 网友说道:

    加油,我也在学习

发表评论

电子邮件地址不会被公开。 必填项已用*标注