Python

Python 知识量:10 - 41 - 150

5.5 模块><

创建Python模块- 5.5.1 -

Python模块是一系列相关的函数和变量的组合。创建模块时,可创建一个.py文件,其中包含用于完成某项任务的函数。模块与普通程序的最大区别是,模块按照某种用途创建,专门用于实现某项任务,可以作为工具箱重复使用,类似于内置函数。

以下是一个用于计算显示乘法表的模块:

# multiplication.py
"""The program of calculating multiplication."""
def modelOne(num):
    for row in range(1,num+1):
        for col in range(1,row+1):
            c=row*col
            if c<10:
                print(' ',end='') #用于列对齐
            print(str(col)+'*'+str(row)+'='+str(c),' ',end='')
        print() #用于换行
def modelTwo(num):
    for row in range(1,num+1):
        for col in range(1,num+1):
            c=row*col
            if c<10:
                print(' ',end='') #用于列对齐
            print(str(col)+'*'+str(row)+'='+str(c),' ',end='')
        print() #用于换行

运行结果为:

>>> 
================= RESTART: D:\PythonTestFile\multiplication.py =================
>>> import multiplication
>>> dir(multiplication)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', 
'__package__', '__spec__', 'modelOne', 'modelTwo']
>>> print(multiplication.__doc__)
The program of calculating multiplication.
>>> multiplication.modelOne(9)
 1*1=1  
 1*2=2   2*2=4  
 1*3=3   2*3=6   3*3=9  
 1*4=4   2*4=8  3*4=12  4*4=16  
 1*5=5  2*5=10  3*5=15  4*5=20  5*5=25  
 1*6=6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
 1*7=7  2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  
 1*8=8  2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  
 1*9=9  2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81  
>>> multiplication.modelTwo(9)
 1*1=1   2*1=2   3*1=3   4*1=4   5*1=5   6*1=6   7*1=7   8*1=8   9*1=9  
 1*2=2   2*2=4   3*2=6   4*2=8  5*2=10  6*2=12  7*2=14  8*2=16  9*2=18  
 1*3=3   2*3=6   3*3=9  4*3=12  5*3=15  6*3=18  7*3=21  8*3=24  9*3=27  
 1*4=4   2*4=8  3*4=12  4*4=16  5*4=20  6*4=24  7*4=28  8*4=32  9*4=36  
 1*5=5  2*5=10  3*5=15  4*5=20  5*5=25  6*5=30  7*5=35  8*5=40  9*5=45  
 1*6=6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  7*6=42  8*6=48  9*6=54  
 1*7=7  2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  8*7=56  9*7=63  
 1*8=8  2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  9*8=72  
 1*9=9  2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81  
>>> multiplication.modelOne(6)
 1*1=1  
 1*2=2   2*2=4  
 1*3=3   2*3=6   3*3=9  
 1*4=4   2*4=8  3*4=12  4*4=16  
 1*5=5  2*5=10  3*5=15  4*5=20  5*5=25  
 1*6=6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
>>> multiplication.modelTwo(6)
 1*1=1   2*1=2   3*1=3   4*1=4   5*1=5   6*1=6  
 1*2=2   2*2=4   3*2=6   4*2=8  5*2=10  6*2=12  
 1*3=3   2*3=6   3*3=9  4*3=12  5*3=15  6*3=18  
 1*4=4   2*4=8  3*4=12  4*4=16  5*4=20  6*4=24  
 1*5=5  2*5=10  3*5=15  4*5=20  5*5=25  6*5=30  
 1*6=6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36

以上调用模块的方式与调用内置函数类似。

在import模块文件时,会生成相应的.pyc文件,.pyc文件即Python编译的目标代码文件,这是为了加快下次执行文件的速度。运行python文件的时候,程序会首先查看是否有.pyc文件,如果有的话,而且.py文件的修改时间和.pyc文件的修改时间一样,就会读取.pyc文件,否则,Python就会读取.py文件。

命名空间- 5.5.2 -

在使用模块时涉及到命名空间的概念。模块的名称代表了一个命名空间,要使用模块中的函数和变量,必须使用import语句,并以命名空间名称(模块名)为前缀。

命名空间避免了函数名或变量名重复时的冲突问题。如果有两个同名的函数,它们功能完全不同,只是名称相同,只要它们分别位于不同的模块中,也不会有任何问题。因为,在实际调用时,需要通过import语句引入模块,而且需要使用命名空间名称,即模块名称作为函数的前缀,例如:modular1.want()、modular2.want()。

虽然命名空间可以避免冲突,但是也要正确的使用模块,如果使用from ... import *语句,直接将模块所有内容导入当前命名空间,调用函数时不再需要前缀,则很可能会出现重名覆盖问题,因此,要尽量避免使用from ... import *语句。