一、import语句
1、模块概述:Python提供了交互式和脚本式两种运行方式。当要执行的代码比较长、且需要重复使用时,我们通常将代码放在扩展名为.py的Python脚本文件中。当我们要编写一个规模比较大的程序时,如果将所有代码都放在一个脚本文件中,则不方便维护和多人协同开发。对于可以在多个程序中重用的功能,我们也最好将其放在单独的脚本文件中,以方便多个程序通过引用该脚本文件、共享这些功能。此时,我们需要按照代码功能的不同,将代码分门别类地放在不同的脚本文件中,这些脚本文件就称为是模块(Module)。
2、当要使用一个模块中的某些功能时,我们可以通过import方式将该模块导入。
语法格式:
import module1
import module2
…
import moduleN
或
import module1, module2, ..., moduleN
3、模块使用方法示例(斐波那契数列的前n项)
fibo.py
1 def PrintFib(n): #定义函数PrintFib,输出斐波那契数列的前n项 2 a, b = 1, 1 #将a和b都赋为1 3 for i in range(1,n+1): #i的取值依次为1,2,…,n 4 print(a, end=' ') #输出斐波那契数列的第i项 5 a, b = b, a+b #更新斐波那契数列第i+1项的值,并计算第i+2项的值 6 print() #输出一个换行 7 def GetFib(n): #定义函数GetFib,返回斐波那契数列的前n项 8 fib=[] #定义一个空列表fib 9 a, b = 1, 1 #将a和b都赋为1 10 for i in range(1,n+1): #i的取值依次为1,2,…,n 11 fib.append(a) #将斐波那契数列的第i项存入列表fib中 12 a, b = b, a+b #更新斐波那契数列第i+1项的值,并计算第i+2项的值 13 return fib #将列表fib返回 14 if__name__=='__main__':#只有单独执行fibo.py时该条件才成立 15 PrintFib(10) #调用PrintFib输出斐波那契数列前10项 16 ls=GetFib(10) #调用GetFib函数获取斐波那契数列前10项组成的列表 17 print(ls) #输出列表ls中的元素
testfibo.py
1 import fibo #导入fibo模块 2 fibo.PrintFib(5) #调用fibo模块中的PrintFib函数,输出斐波那契数列前5项 3 ls=fibo.GetFib(5) #调用fibo模块中的GetFib函数,得到斐波那契数列前5项的列表 4 print(ls) #输出ls中保存的斐波那契数列前5项
输出:
1 1 2 3 5 8 13 21 34 55
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
1 1 2 3 5
[1, 1, 2, 3, 5]
提示:导入模块后,如果要使用该模块中定义的标识符,则需要通过“模块名.标识符名”的方式。
二、全局变量__name__和系统模块
1、每个模块中都有的一个全部变量__name__。 __name__的作用是获取当前模块的名称,如果当前模块是单独执行的,则其__name__的值就是__main__;否则,如果是作为模块导入,则其__name__的值就是模块的名字。
2、系统模块:
可以直接导入系统提供的模块,使用其中的功能。
例:通过sys模块获取运行Python脚本时传入的参数。
1 import fibo #导入fibo模块 2 import sys #导入系统提供的sys模块 3 n=int(sys.argv[1]) #通过sys模块的argv获取执行脚本时传入的参数 4 fibo.PrintFib(n) #调用fibo模块中的PrintFib函数,输出斐波那契数列前n项 5 ls=fibo.GetFib(n) #调用fibo模块中的GetFib函数,得到斐波那契数列前n项的列表 6 print(ls) #输出ls中保存的斐波那契数列前n项
三、for...import语句
1、除了使用import将整个模块导入,也可以使用from import将模块中的标识符(变量名、函数名等)直接导入当前环境,这样我们在访问这些标识符时就不再需要指定模块名。
语法格式:
from 模块名 import 标识符1, 标识符2, ..., 标识符N
2、案例:
(1)直接导入模块中的标识符
1 from fibo import PrintFib, GetFib #导入fibo模块中的PrintFib和GetFib 2 PrintFib(5) #忽略fibo模块名直接调用PrintFib函数 3 ls=GetFib(5) #忽略fibo模块名直接调用GetFib函数 4 print(ls) #输出ls中保存的斐波那契数列前5项数据
1 1 2 3 5
[1, 1, 2, 3, 5]
(2)提示:如果要导入一个模块中的所有标识符,也可以使用“from模块名 import * ”的方式。例如,对于“from fibo import PrintFib,GetFib”,可以直接改为“from fibo import * ”。
如果一个模块定义了列表__all__,则from 模块名 import * 语句只能导入__all__列表中存在的标识符。例如,对于fibo.py脚本文件,如果在第一行加入__all__列表的定义__all__=['PrintFib'],则通过“from fibo import * ”只能导入fibo模块中的PrintFib、而不会导入GetFib。
(3)无论是利用import导入模块、还是用from import导入模块中的标识符,在导入的同时都可以使用as为模块或标识符起别名。
例如:
import fibo as f #导入fibo模块,并为fibo起了个别名f f.PrintFib(5) #调用fibo模块中的PrintFib函数,输出斐波那契数列前5项
披荆斩棘,仗剑天涯