摘要: 基本语法 你已经学习了如何在你的程序中定义一次函数而重用代码。如果你想要在其他程序中重用很多函数,那么你该如何编写程序呢?你可能已经猜到了,答案是使用模块。模块基本上 就是一个包含了所有你定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须以.p...
基本语法
你已经学习了如何在你的程序中定义一次函数而重用代码。如果你想要在其他程序中重用很多函数,那么你该如何编写程序呢?你可能已经猜到了,答案是使用模块。模块基本上 就是一个包含了所有你定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。
使用import语句
模块可以从其他程序 输入 以便利用它的功能。这也是我们使用Python标准库的方法。首先,我们将学习如何使用标准库模块。以os模块为例,下面程序打印出给定目 录下满足特定条件(文件名中含'wx',后缀为'py')的文件的路径。
#!/usr/bin/python # -- coding:utf-8 -- import os def print_file_path(indir): for wroot, wdirs, wfiles in os.walk(indir): for wfile in wfiles: (file_name, file_ext) = os.path.splitext(wfile) if ('wx' in file_name ) and ( file_ext == '.py'): filepath = os.path.join(wroot, wfile) print(filepath) if name == 'main': inws = '/home/bk/progs' print_file_path(inws)
此例短小强悍,充分体现了Python语言简洁的特点。此处使用了os模块,os.walk()对文件夹进行遍历,返回元组,其中第一个为起始路径,第二个为起始路径 下的文件夹,第三个是起始路径下的文件。 os.path.splitext()的作用是分离文件名与扩展名。os.path.join()的作用是合成文件的路径。
from..import语句
这个常见的例子是数学函数。如下面程序,可以像内建函数一样直接使用math模块下面的sqrt(),pow()函数。
from math import * def math_demo(): x = 3 y = 4 z = sqrt(pow(x,2) + pow(y,2)) print(z) if name == 'main': math_demo()
这样的优点是使得程序比较简洁,避免了使用math.sqrt()与math.pow()这样的形式。 但是,一般说来,应该避免使用from..import。 使 用import语句,可以使你的程序更加易读,也可以避免名称的冲突。即使是非常常用的math模块中的一些函数,在其他模块,如numpy中也进行了实现。这样,当 同时使用这两个类库时,就会出现冲突。
创建自己的模块
创建你自己的模块是十分简单的,你一直在这样做!每个Python程序也是一个模块。你已经确保它具有.py扩展名了。下面这个例子将会使它更加清晰。
上面是一个模块的例子。你已经看到,它与我们普通的Python程序相比并没有什么特别之处。我们接下来将看看如何在我们别的Python程序中使用这个模块。
记住这个模块应该被放置在我们输入它的程序的同一个目录中,或者在sys.path所列目录之一,文件名保存为mymodule.py。
通过使用自定义的模块,可以将程序放到不同的文件中进行组织,从而方便大型程序的编写与多人协作。