python函数文件与模块

上传人:第*** 文档编号:55891718 上传时间:2018-10-07 格式:PDF 页数:11 大小:191.68KB
返回 下载 相关 举报
python函数文件与模块_第1页
第1页 / 共11页
python函数文件与模块_第2页
第2页 / 共11页
python函数文件与模块_第3页
第3页 / 共11页
python函数文件与模块_第4页
第4页 / 共11页
python函数文件与模块_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《python函数文件与模块》由会员分享,可在线阅读,更多相关《python函数文件与模块(11页珍藏版)》请在金锄头文库上搜索。

1、Python 函数、文件与模块函数、文件与模块“探索 Python” 这一系列的前几篇文章已为 Python 编程新手介绍了几方面的主题, 包括变量、容器对象和复合语句。本文以这些概念为基础,构造一个完整的 Python 程序。引入了 Python 函数和模块,并展示了构建一个 Python 程序、将其存储在文件中以及通过命令行运行该程序的方法。返璞归真许多流行的玩具都以这样一个概念为基础: 简单的积木。 这些简单的积木可通过多种方式组合在一起构造出全新的作品 有时甚至完全令人出乎意料。 这一概念同样适用于现实生活中的建筑领域,将基本原材料组合在一起,形成有用的建筑物。平凡无奇的材料、技术和工

2、具简化了新建筑物的建造过程,同样也简化了对新踏入此领域的人员的培训。相同的基本概念也适用于计算机程序开发技术,包括以 Python 编程语言编写的程序。本文介绍了使用 Python 创建基本构件 (building block) 的方法,可用于解决更为复杂的问题。这些基本构件可能小而简单,也可能庞大而复杂。无论采用哪种形式,我们这场游戏的目的就是定义基本构件,然后使用它们来创建专属于您的杰作。函数:封装逻辑在本系列的前几篇文章中, 您通常不得不重复输入所有代码, 即便它与上一行代码完全相同。 此要求的惟一特例就是变量的使用: 一旦初始化了变量的内容, 之后就可以随时重用。显而易见,这一用法的普

3、及对我们大有好处。描述杰出程序员的最流行的箴言之一就是他们很懒惰。 这并不表示杰出的程序员不努力工作 而是说他们喜欢灵活的工作方法, 除非绝对必要, 否则从不反复做任何相同的事情。这也就意味着在您需要编写代码之前,首先考虑如何实现重用。Python 中有多种可实现重用的途径,但最简单的技术莫过于使用函数,也称为方法 或子例程。与绝大多数现代编程语言类似,Python 支持使用方法将一组语句封装在一起,从而可在必要时重复使用。清单 1 给出了一段简单的伪代码,为您展示如何在 Python 中编写方法。清单 1. 定义函数的伪代码def myFunction(optional input data

4、):initialize any local dataactual statements that do the workoptionally return any results如您所见,在 Python 中,函数的基本组成部分是包装器代码,指明将被重用的一系列 Python 语句。函数可接受输入参数,输入参数在紧接着函数名(在本例中为 myFunction)之后的圆括号内提供。函数还可返回值(更为正式的说法是:对象),包括像 tuple这样的 Python 容器。在真正着手构建函数之前,让我们先来看看关于伪代码的一些简单却重要的要点:请注意函数名中所用的字符大小写: 大多数字符都是小写的,

5、 但在使用多个单词连接成一个函数名时,后接的各单词首字母应大写(例如,myFunction 中的 F)。这就是所谓的驼峰式大小写风格 (camel casing),是 Python 和其他编程语言中广泛采用的一种技术,可使函数的名称更易阅读。函数定义中的程序语句采用了缩进式排版,函数体由 Python 语句块构成,它们也必须像循环或条件语句那样缩进。函数定义的第一行也称为方法签名 (method signature),以 def 开头(def 是 define这个单词的缩写)。方法签名以冒号结尾,表示下面的代码行是函数体。至此,您或许已认可了使用方法的好处。那么让我们投入进去,开始编写函数吧。

6、“Discover Python, Part 6: Programming in Python, For the fun of it” 中使用了一个 for循环来创建乘法表。清单 2 展示了同样的概念,但本例中创建的是一个函数,用于封装乘法表计算背后的逻辑。清单 2. 第一个函数 def timesTable():.for row in range(1, 6):.for col in range(1, 6):.print “%3d “ % (row * col),.print. timesTable()12345246810369121548121620510152025 t = timesT

7、able type(t) t t()12345246810369121548121620510152025timesTable 函数定义起来非常简单,它不接受任何输入参数,也不返回任何结果。函数体几乎与 “Discover Python, Part 6” 中的语句完全相同(但该文章中的乘法表为从 1到 10)。为了调用 方法,并使其发挥作用,只需输入函数名后接圆括号即可。本例中还输出了乘法表。在 Python 中,函数是一类对象,与整型变量和容器对象相同。因而,您可以将函数指派给一个变量(切记,在 Python 中变量是动态类型化的)。在清单 2 中,我们将 timesTable 函数指派给变

8、量 t。接下来的两行代码表示变量 t 确实指向函数。最后,我们使用变量 t 调用 timesTable 函数。函数:动态更改逻辑清单 2 中的 timesTable 函数不复杂,但也不是特别有用。更有用的示例允许您指定用于生成乘法表的行数和列数 换言之, 允许您在调用函数时动态地更改函数的操作方式。在函数定义中使用两个输入参数即可实现这一功能,如清单 3 所示。清单 3. 更好的乘法表函数 def timesTable2(nrows=5, ncols=5):.for row in range(1, nrows + 1):.for cols in range(1, ncols + 1):.pri

9、nt “%3d “ % (row * cols),.print. timesTable2(4, 6)123456246810123691215184812162024 timesTable2()12345246810369121548121620510152025 timesTable2(ncols=3)123246369481251015两个乘法表函数的定义非常相近,但清单 3 中的函数有用得多(通过清单 3 中的 3次调用即可看出这一点)。为函数添加此附加功能的方法非常简单:提供名为 nrows 和 ncols 的两个输入参数,允许在调用函数时更改乘法表的大小。这两个参数随后会被提供给生成

10、乘法表的两个 for 循环。关于 timesTable2 函数的另一要点就是两个输入参数有默认值。在函数签名中为参数提供默认值,方法是在参数名后添加等号和值,例如 nrows=5。默认参数使程序获得了更高的灵活性,因为在您调用函数时,可以包含两个输入参数,也可以仅包含一个输入参数,甚至可以一个参数都不包含。 但这种方法可能会导致某些问题。 如果您在函数调用期间未指定全部参数,则必须显式地写出您所指定的参数的名称,以使 Python 解释器能够正确地调用函数。最后一个函数调用正体现了这一点,它显式地调用了带有 ncols=3 的 timesTable2 函数,函数创建了一个 5 行(默认值)3

11、列(所提供的值)的乘法表。函数:返回数据使用方法时,人们最希望获得的结果并非总是乘法表。您可能希望完成一次计算,并将计算结果值返回给调用代码。 有时要实现这两个目的, 需要分别调用不返回任何数据的调用方法(子例程)和返回值的方法(函数)。但在 Python 中,您无需担心这些语义问题,因为通过使用 return 语句,几乎可以相同的方式实现这两个目的(参见清单 4)。清单 4. 在函数中返回一个值 def stats(data):.sum = 0.0.for value in data:.sum += value.return (sum/len(data). stats(1, 2, 3, 4,

12、 5)# Find the mean value from a list3.0 stats(1, 2, 3, 4, 5)# Find the mean value from a tuple3.0 stats()Traceback (most recent call last):File “, line 1, in ?TypeError: stats() takes exactly 1 argument (0 given) stats(“12345“)Traceback (most recent call last):File “, line 1, in ?File “, line 4, in

13、statsTypeError: unsupported operand type(s) for +=: float and str这个简单的函数遍历 data(假设 data 为一个容纳有数字数据的 Python 容器),计算一组数据的平均值,然后返回值。函数定义接受一个输入参数。平均值通过 return 语句传回。 当您调用带有包含数字 1 到 5 的 list 或 tuple 的函数时, 返回值会显示在屏幕上。如果调用不带任何参数的函数、带非容器数据类型的函数或带内含非数字数据的容器的函数,就会导致出错。 (在此类情况下抛出错误是很有意义的。更高级的处理方法应包含恰当的错误检查和处理,以应

14、对这些情况,但这不在本文讨论范围内。)此示例已经非常有用,但还可使它更强大,如清单 5 所示。在 Python 中,函数可返回任何有效的对象类型,包括容器类型在内。因此,您可以计算多个数量,并轻松地将多个结果返回给调用语句。清单 5. 返回复合值 def stats(data):.sum = 0.0.for value in data:.sum += value.mean = sum/len(data).sum = 0.0.for value in data:.sum += (value - mean)*2.variance = sum/(len(data) - 1).return (mean

15、, variance). stats(1, 2, 3, 4, 5)(3.0, 2.5) (m, v) = stats(1, 2, 3, 4, 5, 6, 7, 8, 9) print m, v5.0 7.5为了从一个函数中返回多个值,要将其括在一个括号中并以逗号分隔 换句话说,创建并返回一个 tuple。新 stats 函数的函数体要略加修改,以计算数字序列的样本方差。最后,正如 stats 函数的两次调用所示,tuple 值可作为一个 tuple 存取,也可将其解包为各自的分量。模块:简化代码重用至此,您或许已相信了代码重用的价值。但即便是使用函数,您依然需要在打算使用函数时重新输入函数体。

16、例如,当您打开一个新的 Python 解释器时,必须键入之前所创建的所有函数。幸运的是,您可以使用模块 将相关函数(和其他 Python 对象)封装在一起,将其保存在一个文件中,然后将这些已定义好的函数导入到新 Python 代码内,包含于 Python 解释器之中。为介绍在 Python 中使用模块的方法,我们将重用清单 5 中的 stats 方法。有两个选择:您可以从与本文相关的压缩文件中提取名为 test.py 的文件,也可以在编辑器中键入函数,然后将文件保存为 test.py。完成上一步后,在您保存 test.py 的目录中启动一个新的Python 解释器,然后输入如清单 6 所示的语句。清单 6. 使用模块 import test test.stats(1, 2, 3, 4, 5, 6, 7, 8, 9)(5.0, 7.5) from test import stats (m,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号