2.6 import语句
Python中可以使用import语句来引入模块、包和库。
import语句的一般语法格式如下:
import <模块名|包名|库名>
Python模块就是一个包含了一组定义的变量、函数和类所组成的Python文件。这个文件可以是以.py为后缀的原始文本文件,也可以是.py文件编译过的.pyc文件。
我们编写的程序一般也存储在.py文件中,如果这个文件包含变量、函数或类,就可以提供给其他Python程序使用。假定模块名为stockn.py。
#文件名:stockn.py #数字股票代码转换字符串股票代码 def stockname(n): ''' 数字股票代码转换字符串股票代码 stockname(n) 参数: n整型 返回:字符串 ''' s=str(n) s=s.strip() if(len(s)<6 and len(s)>0): s=s.zfill(6)+'.SZ' if len(s)==6: if s[0:1]=='0': s=s+'.SZ' else: s=s+'.SH' return s
如果我们想用import语句导入stockn.py模块,就可以使用这个模块中的stockname(n)函数,模块名可以省略.py,如示例2-23所示。
import stockn mystock=650 stock=stockn.stockname(mystock) stock2=stockn.stockname(600020) print('stock= ', stock) print('stock2= ', stock2)
程序运行结果:
stock= 000650.SZ stock2= 600020.SH
为了便于管理,我们将不同的模块按功能放置到不同的子目录中。如果在子目录“funa”和子目录“funb”中都包含aaa.py模块,那么在导入时就需要增加子目录名。
“funa/aaa.py”文件内容如下:
def aaa(): return 'funa/aaa.py'
“funb/aaa.py”文件内容如下:
def aaa(): return 'funb/aaa.py'
下面是演示示例2-24。
import funa.aaa import funb.aaa aa=funa.aaa.aaa() print('\naa=funa.aaa.aaa()') print('aa= ', aa) aa=funb.aaa.aaa() print('\naa=funb.aaa.aaa()') print('aa= ', aa) from funa.aaa import * bb=aaa() print('\nfrom funa.aaa import *') print('bb= ', bb) from funb.aaa import * bb=aaa() print('\nfrom funb.aaa import *') print('bb= ', bb)
程序运行结果:
aa=funa.aaa.aaa() aa= funa\aaa.py aa=funb.aaa.aaa() aa= funb\aaa.py from funa.aaa import * bb= funa\aaa.py from funb.aaa import * bb= funb\aaa.py
包是一个有层次的文件目录结构,它定义了由N个模块或N个子包组成的Python应用程序执行环境。
包所在子目录与模块子目录功能用法基本一样。包所在目录中一般包含特定的__init__.py文件,这个文件和其他诸多.py文件构成一个包。
__init__.py文件可以为空文件,也可以写入一些包执行的初始化代码。
假如func包中的__init__.py文件有包执行的初始化代码,那么我们就可以引用这个包名。
import func
假如func的目录有__init__.py和aaa.py两个文件,其中__init__.py文件为空文件,那么此时包和带子目录的模块用法就没什么区别。我们用如下格式导入包中的aaa.py文件。
import func.aaa
看示例2-25。
from func.aaa import * bb=aaa() print('\nfromfunc.aaa import *') print('bb= ', bb)
程序运行结果:
from func.aaa import * bb= func\aaa.py
库是由众多包和模块组成的,是能够完成某类程序开发所必须具有的基础功能。
Python库分为自带内置库(也称标准库)和第三方库。
例如,math是内置数学库,Tkinter是用于开发Python图形用户界面的内置库。
第三方库一般都用pip软件安装管理。例如,NumPy库是一个具有强大科学计算功能的第三方库,Pandas库是建立在NumPy库上的常用数据处理库。
用户自编模块也可以认为是最小的Python自定义库。
使用import语句引入库有以下几种方法。
(1)直接引用库。
import <库名>
此时,程序可以调用库中的所有函数,其格式如下:
<库名>.<函数名>(<函数参数>)
例如,使用模块bbb.py。
#模块bbb.py var1='var1' var2='var2' var3=18.55 def aaa(): return 'aaa' def bbb(): return 'bbb2' def ccc(): return 'ccc3' def ddd(x='ddd4'): return x
请看演示示例2-26。
import bbb bb=bbb.aaa() print('bb= ', bb) bb=bbb.ddd() print('bb= ', bb) bb=bbb.ccc() print('bb= ', bb)
程序运行结果:
bb= aaa bb= ddd4 bb= ccc3
(2)直接引用库,并增加别名。
import <库名> as <别名>
此时,程序可以调用库中的所有函数,其格式如下:
<别名>.<函数名>(<函数参数>)
请看示例2-27。
import bbb as aa bb=aa.aaa() print('bb= ', bb) bb=aa.ddd() print('bb= ', bb) bb=aa.ccc() print('bb= ', bb) print('var3= ', aa.var3)
程序运行结果:
bb= aaa bb= ddd4 bb= ccc3 var3= 18.55
(3)如果只从库中引用函数,就可以使用如下的命令格式。
from <库名> import <函数名1,函数名2, …,函数名n>
此时,程序可以调用库中的函数,也可以直接省略库名。使用库中函数的格式如下:
<函数名>(<函数参数>)
请看示例2-28。
from bbb import bbb, ddd bb=bbb() print('bb= ', bb) bb=ddd('xxx') #输入参数’xxx' print('bb= ', bb) #bb=ccc() #可删除注释再运行一次
程序运行结果:
bb= bbb2 bb= xxx
如果使用模块bbb.py中的ccc函数,就会出现错误提示:
“NameError: name 'ccc' is not defined”。
(4)如果不写具体函数名,直接用通配符“*”,则表示引入库中所有函数。在使用中可以省略模块库名,其格式如下:
from <库名> import *
其中,*是通配符,表示库中所有函数。
此时,在调用该库的函数时不需要使用库名,直接使用如下格式:
<函数名>(<函数参数>)
请看演示示例2-29。
from bbb import * bb=bbb() print('bb= ', bb) bb=ddd('12345') print('bb= ', bb) bb=ccc() print('bb= ', bb)
程序运行结果:
bb= bbb2 bb= 12345 bb= ccc3
(5)库中定义的类和变量的使用方法与库中函数的使用方法相同。
例如:
<库名>.<类名> <别名>.<变量名>
见示例2-30。
import bbb as aa bb=aa.ddd('ABCD') print('bb= ', bb) bb=aa.ccc() print('bb= ', bb) print('var3= ', aa.var3) v1=aa.var1 v2=aa.var2 print('v1= ', v1) print('v2= ', v2)
程序运行结果:
bb= ABCD bb= ccc3 var3= 18.55 v1= var1 v2= var2
(6)在Python中多个模块或程序使用同一个文件,如果不设定库名或别名,就会认为是一次使用的局部变量。程序终止,变量就会释放消失。