python入门系列7―——模块

来源:互联网 发布:淘宝网狗狗鞋子 编辑:程序博客网 时间:2024/06/01 20:35

欢迎前往我的个人博客


模块其实就是一个python文件,我们在大型项目里,不可能只写一个文件需要很多文件不同文件内的函数、变量调用就需要用到模块概念

使用import导入一个模块,比如之前的

import time
使用方法:  模块名.函数

 如果确保不会导入多个同名函数,则可以使用 from 模块名 import  函数名,这样调用就不需要加模块名了

例:

import mathprint math.floor(9.99)from math import floorprint floor(9.99)

之前我们导入的都是python内置的模块,如果导入我们自己的模块呢

在同一个文件夹下新建2个记事本,修改后缀名,命名test1.py和test2.py

test1.py 代码如下:

def add(num1,num2):    return num1+num2
定义一个加法函数

test2.py 代码如下:

import test1print test1.add(10,20)
结果是:30

为什么python能找到这个test1.py呢?

当你导入一个模块,Python 解析器对模块位置的搜索顺序是:
1、当前目录
2、如果不在当前目录,Python 则搜索在环境变量PYTHONPATH下的目录。
3、如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。
模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。


如果都不在这几个目录,我们可以使用sys.path来添加目录

例如:

improt syssys.path.append('c:/python')
想查看path有哪些目录,可以直接print:

import sysprint sys.path
看着有点乱,可以导入智能打印,就是pprint:

import sys,pprintprint pprint.pprint(sys.path)



如果一个模块文件有非常多的函数,不可能打开文件一个个对照着调用,我们可以使用dir(模块名)

我们先丰富下test1.py:

filename ="test1.py"def add(num1,num2):    return num1+num2def Sub(num1,num2):    return num1-num2
test2.oy:

import test1print dir(test1)
输出结果是:

['Sub', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'add', 'filename']
__xxx__都是特殊字符,__name__指向模块的名字,__file__指向该模块的导入文件名


为了更好的组织模块,可以把一类模块分组给一个包,包名其实就是模块所在目录

在test1.py同级创建一个文件夹MyPackage,文件夹下创建4个python文件分别是是p1.py,p2.py,p3.py,__init__.py 

__init__.py 用于标识当前文件夹是一个包,代码:

    print "HiPackage init"

p1.py代码:

def Myprint():print "this is p1"return

p2.py代码:

def Myprint():print "this is p2"return

p3.py代码:

def Myprint():print "this is p3"return

test2.py:

import Hipackage.p1,Hipackage.p2,Hipackage.p3Hipackage.p1.Myprint()Hipackage.p2.Myprint()Hipackage.p3.Myprint()
结果:

MyPackage initthis is p1this is p2this is p3



原创粉丝点击