第6章使用模块
目录26.1 模块的创建6.2 模块的导入6.3 包6.4 第三方包的安装
6.1模块的创建
6.1模块的创建模块是Python中的一个重要概念。随着编写的程序越来越长,可以将这些代码分成几个文件,这样更易于代码的维护。当把一些相关的代码存放在一个文件中时,就创建了一个模块。模块中的定义可以被导入到其他模块中从而被其他模块所使用,这就使得我们可以在多个程序中使用已经编写好的函数而无需将函数复制到每个程序中。总的来说,模块就是包含Python定义和声明的文件。文件名就是模块名加上.py的扩展名。例如,在目录下创建一个名为“fibonacci.py”的文件,其内容如代码清单6-1所示。
6.1模块的创建代码清单6-1fibonacci.py1 deffibonacci(x):2 a=03 b=14 c=05 foriinrange(0,x):6 a=b7 b=c8 c=a+b9 returnc1011 defrecursiveFibonacci(x):12 ifx==0:13 return014 elifx==1:15 return116 else:17 returnfibonacci(x-1)+fibonacci(x-2)此时已经创建了一个名为fibonacci的模块,模块内定义了两个函数。可以在命令行或其他文件中使用import语句来导入这一模块,使用模块内的函数。模块有一些内置属性,用于存储模块的某些信息,如__name__,__doc__,等等。__name__属性用来取得模块的名称。如果当前模块是主模块,则此时__name__的值为__main__。
6.2模块的导入
6.2模块的导入Python以模块为单位来组织代码。Python标准库自身就内置了许多标准模块,可以应用在多个方面,例如,string模块包含常见的字符串操作,math模块包含常见的数学函数,socket模块提供了对底层网络接口的支持,等等。除了标准模块之外,Python还有非常丰富的第三方模块以供用户使用。当然,用户也可以自己编写模块。
6.2模块的导入要在模块外部使用模块内定义的函数,首先要导入该模块。使用import语句可以导入一个模块,格式为“import模块名[as别名]”。例如,要导入6.1节定义的fibonacci模块,可以通过下面的语句来导入:importfibonacci这条语句直接导入了模块名,可以通过模块名来访问模块内的对象。例如:print(fibonacci.fibonacci(10))result=fibonacci.recursiveFibonacci(7)如果频繁地使用一个函数而不想总是带着模块名进行调用,则可以将其赋给一个本地变量。例如:fib=fibonacci.fibonacciprint(fib(6))此外,还可以在import后添加as子句来作为模块的别名。例如:importfibonacciasfibo使用这种方法可以使用“别名.对象名”的格式来调用模块内的对象。例如:fibo.recursiveFibonacci(11)
6.2模块的导入Python还支持另外一种语法,即“from模块名import对象名[as别名]”。使用这种格式仅导入明确指定的对象,可以减少访问速度,同时不需要使用模块名进行调用。例如:fromfibonacciimportrecursiveFibonacciprint(recursiveFibonacci(12))如果要导入的模块内的对象与当前的某对象同名,可以使用as子句来为要导入的对象设置别名,从而避免这一情况。如果想要使用这一语法导入模块下的全部对象,则可以使用星号来替代对象名。例如:fromfibonacciimport*这种方式虽然简单省事,但是并不推荐使用。一旦不同模块里有重名的对象,这种导入方式将会引发混乱。注意:习惯上,我们将所有的import语句放在文件的开始位置,虽然这不是强制性的。实际上,import语句可以置于程序中的任何位置。
6.2模块的导入代码清单6-2importModule.py1 importfibonacciasfib #以fib为别名导入fibonacci模块2 frommathimportfactorial #导入math模块的factorial