python总结-第三章-函数的建立

3.1函数

1.定义函数

制作函数的过程称为定义函数(define function)。

python总结-第三章-函数的建立

关键字def之后跟着的是函数名字,函数名后面的括号中的元素会说明函数有哪些参数。参数可以有多个也可以完全没有,即使没有输入数据,括号也必须保留。

函数定义中的参数是个形式代表,并不是真正的数字,故也称为形参(parameter)。在函数的最后,有一句return,关键字return用于说明函数的返回值,即函数的输出数据。

作为函数的最后一句,函数执行到return时就会结束,不管后面是否还有其他语句

python总结-第三章-函数的建立

return还起到了中止函数和制定返回值的功能,在python语法中,return不是必须的,如果没有return,或者return后面没有返回值,函数将返回none,none是python中的空数据,用来表示什么也没有。

return可以返回多个值,多个值跟在return后面,用逗号分隔:return a,b,c

2.调用函数

使用函数的过程叫做调用函数(call function)。

python总结-第三章-函数的建立

python总结-第三章-函数的建立

python通过参数出现的先后位置,知道3对应的是第一个形参a,4对应第二个形参b。

3.函数文档

使用内置函数help()来找到某个函数的说明文档,例如:

python总结-第三章-函数的建立

对于自定义的函数,需要加上简单地注释:

python总结-第三章-函数的建立

使用help()函数来查看注释:

python总结-第三章-函数的建立

※参数传递:把数据用参数的形式输入函数,被称为参数传递。python会通过位置来确认数据对应的是哪个参数

python总结-第三章-函数的建立

在三次调用中,python都是通过位置来确定实参与形参的对应关系的。若觉得位置传参比较死板,那么可以用关键字(keyword)的方式来传递参数。在定义函数时,我们给了形参一个符号标记,即参数名:

python总结-第三章-函数的建立

但如果把位置参数1放在关键字参数c=5的后面,则会报错:

python总结-第三章-函数的建立

位置传递和关键字传递让数据与形参对应起来,因此数据的个数与形参的个数应对应。但在函数定义时,我们可以设置某些形参的默认值。若在调用时,不提供形参的具体数值,那么他们将采用定义时的默认值:

python总结-第三章-函数的建立

4.包裹传参

但有时,我们不知道参数的个数,此时用包裹传参的方式来进行参数传递会很有用。

python总结-第三章-函数的建立

两次调用,尽管参数个数不同,但都基于同一个package_position()定义。在调用package_position()时,所有的数据都根据先后顺序,收集到一个元组,在函数内部,我们可以通过元组来读取传入的数据,这就是包裹位置传参。#注意all_arguments之前的*号.

python总结-第三章-函数的建立

与上例不同的是,上例在传送包裹的时候,用的是元组,而此例用的是字典包裹传参。

元组传参与字典传参可以混合使用:

python总结-第三章-函数的建立

3.2 递归

1.数学归纳法

用数学归纳法求1~100的总和:

python总结-第三章-函数的建立

在一个函数的定义中,调用了函数本身的计算方法,称为递归(recursion)。为了保证函数不使计算机陷入死循环,递归要求程序有一个能够达到的终止条件。上例的终止条件就是gua_sum(1)=1。

2.函数栈

程序的递归需要用到栈(stack)这一数据结构。栈是数据结构的一种,可以有序地存储数据。

栈最显著的特征是“先进后出”。栈只支持两个操作:pop与push,栈用pop操作来取出栈顶元素,用push操作将一个新的元素存入栈顶。在递归过程中,可以看作是一个先增长栈后消灭栈的过程。

3.变量的作用域

函数的内部可以创建新变量,如:

python总结-第三章-函数的建立

这是因为python寻找变量的范围不止当前帧,他还会寻找函数外部,即主程序中定义的变量。因此在一个函数内部,我们能看到函数外部已经存在的变量:

python总结-第三章-函数的建立

当主程序中已经有了一个变量,函数调用内部可以通过赋值的方式再创建了一个同名变量,这时函数会优先使用自己函数帧中的那个变量:

python总结-第三章-函数的建立

由于函数使用的是函数内部的那一份info,故函数内部对info的操作不会影响外部的变量info。

但也有特殊的例子:

python总结-第三章-函数的建立

※当参数是一个数据容器时,函数内外部只存在一个数据容器,所以函数内部对数据容器所做的事会影响到函数外部。

3.3 引入模块

在python中,一个.py文件就是一个模块,通过模块,可以调用其他文件中的函数,而import指令,就是为了在新的程序中重复利用已有的python程序。