Python导入模块,Python import用法(超级详细)

对于一个真正的Python程序,我们不能自己完成所有的工作,通常需要使用第三方类库。此外,不可能在源文件中编写整个程序的源代码,需要以模块化的方式组织项目的源代码。
使用 import 但实际上,导入模块的语法 import 还有更详细的用法,主要有两种:
import模块名1[as别名1],模块名2[as别名2]:导入整个模块。 from模块名import成员名1[as别名1],成员名2[as别名2]:在导入模块中指定成员。
上面两种 import 语句的区别主要有以下几点:
第一种 import 所有成员(包括变量、函数、类别等)导入整个模块。);第二种 import 语句只导入模块中的指定成员(除非使用) form 模块名 import *,但通常不建议使用这种语法)。
使用第一种 import 当语句导入模块中的成员时,必须添加模块名或模块别名前缀;使用第二种 import 当语句导入模块中的成员时,直接使用成员名或成员别名,无需使用任何前缀。
以下程序使用导入整个模块的最简单语法导入指定模块:
#导入sys整个模块 importsys #访问模块中的成员使用sys模块名作为前缀 print(sys.argv[0])
上面第 2 以最简单的方式导入行代码 sys 因此,在程序中使用模块 sys 模块中的成员必须添加模块名作为前缀。
操作上述程序时,可以看到以下输出结果(sys 模块下的 argv 用于获取操作的变量 Python 程序的命令行参数,包括 argv[0] 用于获取该 Python 程序名)。
importtest.py
在导入整个模块时,可以指定模块的别名。例如,以下程序:
#将sys的整个模块导入,并指定别名为sys importsysass #访问模块中的成员使用s模块的别名作为前缀 print(s.argv[0])
导入第二行代码 sys 只有在模块中指定了别名 s,所以在程序中使用 sys 模块中的成员必须添加模块别名 s 作为前缀。操作此程序时,可以看到以下输出结果:
22ttestimport.py
使用导入整个模块的语法也可以一次导入多个模块,用逗号将多个模块隔开。例如,以下程序:
#导入sys、os两个模块 importsys,os #访问模块中的成员使用模块名作为前缀 print(sys.argv[0]) #os模块的sep变量表示平台上的路径分隔符 print(os.sep)
上面第 2 一次导入行代码 sys 和 os 因此,程序应该使用两个模块 sys、os 只要两个模块中的成员单独使用 sys、os 模块名可以作为前缀。在 Windows 该程序在平台上运行,可以看到以下输出结果(os 模块的 sep 变量代表平台上的路径分隔符):
importtestt3.py \
同时,在导入多个模块时,也可以指定模块的别名,如以下程序:
#导入sys、os两个模块,为sys指定别名s,为os指定别名os importsysass,osaso #访问模块中的成员使用模块别名作为前缀 print(s.argv[0]) print(o.sep)
上面第 2 syss一次导入了行代码 和 os 将两个模块分别命名为它们 s、o,因此,程序可以通过 s、o 使用两个前缀 sys、os 两个模块中的成员。在 Windows 该程序在平台上运行时,可以看到以下输出结果:
import_test4.py \
接下来介绍使用情况 from...import 指定成员在导入模块中的用法。使用以下程序 from...import 导入指定成员最简单的语法:
#argv成员导入sys模块 fromsysimportargv #使用导入成员的语法,直接使用成员名访问 print(argv[0])
第 2 导入行代码 sys 模块中的 argv 成员可以在程序中直接使用 argv 成员不需要使用任何前缀。在操作此程序时,可以看到以下输出结果:
fromimporttest.py
使用 from...import 在导入模块成员时,也可以为成员指定别名,如下程序:
#argv成员导入sys模块,并指定其别名v fromsysimportargvasv #使用导入成员(并指定别名)的语法,直接使用成员的别名访问 print(v[0])
第 2 导入行代码 sys 模块中的 argv 成员,并为成员指定别名 v,这样,您就可以在程序中通过别名 v 使用 argv 成员不需要使用任何前缀。在操作此程序时,可以看到以下输出结果:
2ttestfromimport22.py
在使用 form...import 多个成员也可以同时导入模块成员,例如以下程序:
#argv导入sys模块,winver成员 fromsysimportargv,winver #使用导入成员的语法,直接使用成员名访问 print(argv[0]) print(winver)
上面第 2 导入行代码 sys 模块中的 argv、 winver 成员可以在程序中直接使用 argv、winver 两个成员不需要使用任何前缀。操作此程序时,可以看到以下输出结果(sys 的 winver 成员记录了这一点 Python 的版本号):
fromimporttesttttest3.py 3.6
在使用 from...import 同时,在导入多个模块成员时,也可以指定其他名称,同样使用 as 关键字是指定成员的别名,如下程序:
#argv、winver成员导入sys模块,并为其指定别名v、wv fromsysimportargvasv,winveraswv #使用导入成员(并指定别名)的语法,直接使用成员的别名访问 print(v[0]) print(wv)
上面第 2 导入了行代码 sys 模块中的 argv、winver 成员,并分别为他们指定别名 v、wv,这样,就可以在程序中通过程序 v 和 wv 使用两个别名 argv、winver 成员不需要使用任何前缀。
在使用 from...import 在语法上,指定模块中的所有成员也可以一次导入,例如以下程序:
#所有导入sys棋块的成员 fromsysimport* #使用导入成员的语法,直接访问成员的别名 print(argv[0]) print(winver)
上述代码一次导入 sys 模块中的所有成员都可以通过成员名使用模块中的所有成员。该程序的输出结果与以前程序的输出结果完全相同。
需要注意的是,一般不建议使用“from 模块 import这种语法导入指定模块中的所有成员,因为它有潜在的风险。例如,同时导入 module1 和 module2 如果这两个模块中的所有成员都有一个 foo() 在程序中执行以下代码时,函数:
foo()
上调用面条的这个 foo() 函数到底是 module1 还是模块中的 module2 在模块中?因此,导入指定模块中所有成员的使用是有风险的。
但如果换成以下两种导入方式:
importmodule1 importmodule2asm2
接下来,我们应该分别调用这两个模块 foo() 函数非常清晰。程序可以使用以下代码:
#使用模块module1的模块名作为前缀调用foo()函数 module1.foo() #使用module2的模块别名作为前缀调用foo()函数 m2.foo()
或者使用 from...import 句子也可以:
#将fooo成员引入module1,并指定foo1 fromoduleimportfooasfool #foo成员导入module2,并指定foo2 fromodule2importfooosfoosfoo2
此时通过别名将 module1 和 module2 在两个模块中 foo 函数被很好地区分开来,然后分别调用两个模块 foo() 函数非常清晰:
foo1()#在module1中调用foo()函数 foo2()#在module2中调用foo()函数
