2.7 Python模块
Python模块(module)是一个Python文件,以.py结尾,包含Python对象定义和Python语句。模块能够让Python代码段更具逻辑性,把相关的代码分配到一个模块里能让代码更好用、更易懂。模块能定义函数、类和变量,也能包含可执行的代码。下例是一个简单的模块:support.py。
def print_func( par ): print ("Hello : ", par ) return
1.import函数
模块定义好后,我们可以使用import语句引入模块,语法如下:
import module1[,module2[,…,moduleN]]
比如要引用模块math,就可以在文件最开始的地方用import math来引入。在调用math模块中的函数时,必须使用如下格式:
模块名, 函数名
在导入时,解释器会先按照搜索路径搜索所有目录的列表,如想要导入模块support.py,需要把命令放在脚本的顶端:
# 导入模块 import support # 现在可以调用模块里包含的函数了 support.print_func("Runoob")
输出结果为:
Hello: Runoob
不管你执行了多少次import语句,一个模块只会被导入一次,这样可以防止导入模块被一遍又一遍地执行。
2.from...import语句
Python的from语句可以将模块中某个指定的部分导入当前命名空间中。语法格式如下:
from modname import name1[, name2[, ... ,nameN]]
例如,要导入模块fib的fibonacci函数,使用如下语句:
from fib import fibonacci
这个声明不会把整个fib模块导入当前的命名空间中,而是只会将fib的fibonacci函数单独导入执行这个声明的模块的全局符号表。
3.from...import*语句
把一个模块的所有内容全都导入当前的命名空间也是可行的,只需使用如下声明:
from modname import *
例如我们想一次性引入math模块中所有的东西,语句如下:
from math import *
虽然该声明能够导入一个模块中的所有项目,但是它不该被过多地使用。
4.dir()函数
dir()函数是一个排好序的字符串列表,内容是一个模块里定义的所有模块、变量和函数。一个简单的实例如下:
# 导入内置math模块 import math content = dir(math) print (content;)
输出结果为:
[ '__doc__', '__file__', '__name__' , 'acos' , 'asin' , 'atan','atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp','fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log','log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh' ]
在这里,特殊字符串变量__name__指向模块的名字,__file__指向该模块导入的文件名。
5.globals()和locals()函数
根据调用位置的不同,globals()和locals()函数可用于返回全局和局部命名空间中的名字。如果在函数内部调用locals(),返回的是所有能在该函数内访问的局部命名;如果在函数内部调用globals(),返回的是所有能在该函数内访问的全局名字。两个函数的返回类型都是字典,所以名字能用keys()函数获取。
6.reload()函数
当一个模块被导入一个脚本,模块顶层部分的代码只会被执行一次。因此,如果想重新执行模块中顶层部分的代码,可以用reload()函数。该函数会重新导入之前已导入的模块。语法如下:
reload(module_name)
在这里,module_name表示模块的名字,而不是一个字符串形式。比如想重新导入hello模块,语句如下:
reload(hello)
7.Python中的包
包是一个分层次的文件目录结构,它定义了一个由模块、子包和子包下的子包等组成的Python的应用环境。简单来说,包就是文件夹,但该文件夹下必须存在__init__.py文件,该文件的内容可以为空。__init__.py用于标识当前文件夹是一个包。考虑一个在package_runoob目录下的runoob1.py、runoob2.py、__init__.py文件,test.py为测试调用包的代码,目录结构如下:
test.py package_runoob |----__init__.py |----runoob1.py |----runoob2.py
源代码如下:
def runoob1(): print ("I'm in runoob1") def runoob2(): print ("I'm in runoob2")
现在,在package_runoob目录下创建__init__.py:
if __name__ == '__main__': print ('作为主程序运行') else: print ('package_runoob 初始化')
然后在package_runoob同级目录下创建test.py来调用package_runoob包。
# 导入Phone包 from package_runoob.runoob1 import runoob1 from package_runoob.runoob2 import runoob2 runoob1() runoob2()
输出结果为:
package_runoob 初始化 I'm in runoob1 I'm in runoob2
为了举例,这里只在每个文件里放置了一个函数,在实际应用中,可以放置多个函数,也可以在这些文件中定义Python的类,然后为这些类建一个包。